再接下来我会系统的整理和总结集合的不同点,重点和特点等等一一列举出来,有重点也有很细的其他知识点,有共同之处也有不同之处.但是都是个人学习的总结,可能学的一般般,但是我还在努力中~~~(不喜勿喷)
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Collection(单例根接口)
LinkedList
底层是链表实现的,线程不安全,增和删比较快,查找和修改比较慢
Vector(枚举特有取出方式)JDK1.0就有了他比集合更早存在.
底层是数组实现的,线程安全的,无论增删改查都慢(基本上被ArrayList取代了)
如果查找和修改多,用ArrayList
如果增和删多,用LinkedList
如果都多,用ArrayList
注意:上面我只是列举类基本的特点,我需要声明的是一下知识点!
(我在这里只提供说明的具体方法,步骤就不一一写出来了之前有写过)
List集合的迭代方式:
第一种:
也是List集合特有的(不常用,但需要了解)
通过sinze()和get()方法遍历获取的
第二种:
通过迭代器 Iterator (必须掌握,在Map的集合中迭代也是可以的但是具体的方法下面介绍)
Iterator的子类ListIterator可以实现倒叙遍历 (但是没啥用只作为了解即可)
第三种:
JDK1.5新特性for循环遍历 (必须掌握,在Map的集合中迭代也是可以的但是具体的方法下面介绍)
格式如下:
for(数组或者Collection接口集合中的元素类型 变量名 : 数组或者Collection集合对象) {
执行语句;
}
引起注意:在迭代的过程中,不能调用集合本身的方法来改变集合本身的数据结构(简单地说就是不能在遍历的时候增删元素),这样的并发操作是不允许的,不然回报:并发修改异常
HashSet
底层是哈希算法实现
LinkedHashSet(HashSet的子类,是Set集合中唯一一个元素存取有序的集合)
底层是链表实现,但是也是可以保证元素唯一,和HashSet原理一样
TreeSet
底层是二叉树算法实现
一般在开发的时候不需要对存储的元素排序,所以在开发的时候大多用HashSet,HashSet的效率比较高
TreeSet在面试的时候比较多,问你有几种排序方式,和几种排序方式的区别
这里我想提是自定义类的对象存入HashSet去重复
1,类中必须重写hashCode()和equals()方法
2,hashCode(): 属性相同的对象返回值必须相同, 属性不同的返回值尽量不同(提高效率)
3,equals(): 属性相同返回true, 属性不同返回false,返回false的时候存储
还有就是TreeSet存入对象的时候
a.自然顺序(Comparable)
TreeSet类的add()方法中会把存入的对象提升为Comparable类型
调用对象的compareTo()方法和集合中的对象比较
根据compareTo()方法返回的结果进行存储
b.比较器顺序(Comparator)
创建TreeSet的时候可以制定 一个Comparator
如果传入了Comparator的子类对象, 那么TreeSet就会按照比较器中的顺序排序
add()方法内部会自动调用Comparator接口中compare()方法排序
调用的对象是compare方法的第一个参数,集合中的对象是compare方法的第二个参数
c.两种方式的区别
TreeSet构造函数什么都不传, 默认按照类中Comparable的顺序(没有就报错ClassCastException)
TreeSet如果传入Comparator, 就优先按照Comparator
----------------------------------------------------------------------------------------------------------------------------------------------
HashMap
底层是哈希算法,针对键,线程不安全,效率高,jdk1.2版本就有了所以命名规范,可以存入null值
LinkedHashMap (存取元素是有序的) 只做了解
底层是链表,针对键,
Hashtable(基本上被HashMap替代)
底层是好像算法,线程不安全,效率低,JDK1.0版本的使用它的T都不是大写的因为那个时候还没有命名规范,不可以存入null值
TreeMap
底层是二叉树算法,针对键
开发中用HashMap比较多
引起注意:
1,HashMap键的位置存储自定义元素,想保证键唯一,依赖元素所属类的hashCode() 和 equals()
2,TreeMap集合键存储自定义对象,保证键唯一且实现排序:
自然顺序
比较器顺序
不难发现他们和set集合的常用子类集合存入 对象的时候需要的条件是一样的.所以学完set在学map比较容易,
因为是我只列举了集合常用的一些需要注意的和理解的地方,学的不多所以分享的有限,但是我on the way!