1、ArrayList
List<String> list = new ArrayList<String>();
list.add("a");
list.add("b");
list.add("c");
list.add(2, "xxx");
// 遍历数据
for(int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
// 通过迭代器遍历数据
Iterator<String> iterator = list.iterator();
while(iterator.hasNext()) {
String str = iterator.next();
System.out.println(str);
}
底层使用数组
不是线程安全的
2、LinkedList
LinkedList底层是双向链表
不是线程安全的
添加、修改、删除的性能高,查询的性能不高
3、Vector
和ArrayList功能类似,底层也是数组,最主要的区别是vector是线程安全的,缺点是效率比较低
4、增强for循环
对数组和集合做遍历
for(数据类型 变量:集合变量) {
}
5、Set
hash算法
Hash(散列、杂凑)算法,把任意长度的输入通过特定的算法换成固定长度的输出,输出的值就是hash值。
这个特定的算法就是hash算法,hash算法并不是一个固定不变的算法,只要能达到这个目的的算法都可以叫hash算法
-
HashSet
元素唯一性
无序性
允许存在一个null值
不是线程安全的
唯一性原理:对象的hash值和equals都相等,那么就是重复的对象
-
LinkedHashSet
具有可预知迭代顺序的Set接口的哈希表和链表实现,此实现与HashSet的不同之处在于,后者维护着一个运行于所有条目的双重链接列表,此链接列表定义了迭代顺序,即按照将元素插入到set中的顺序(插入顺序)进行迭代
元素唯一性
有序的
允许一个null存在
不是线程安全的
与HashSet对比多了一个顺序,用的不多 -
TreeSet
TreeSet可以自定义排序,如果TreeSet所存储的对象的类没有实现Comparable接口就会报错ClassCastException。所以我们如果想要使用TreeSet来对自定义的对象排序,必须实现Comparable接口
元素唯一性
可自定义排序
不允许null存在
不是线程安全的
6、Map
map是一个有键值对的集合
我们可以通过key来获取对应的值,将键值对映射到值的对象
一个map的key不能重复
键只能有一个空值,值可以有多个空值
map也是无序的
Map<K,V> K和V表示泛型,map的K和V可以是任何类型(不能是基本的数据类型)
Map集合和Collection集合的区别
Map集合是键值对的集合,Collection是单一出现的数据集合
Map的键值唯一的,而Collection子接口中List集合是可以重复的,set是唯一的
-
HashMap
HashMap是map的实现类
允许多个 null值和一个null值
没有顺序
不是线程安全的
-
TreeMap
可以按照key来做排序
key不能为null,key不能重复
不是线程安全的
可以做排序
-
Hashtable
HashTable是map的实现类
不允许有任何的null键和null值
是线程安全的
无顺序
-
LinkedHashMap
是map的实现类
允许一个null键和多个null值
是有顺序的(按照添加的顺序)
不是线程安全的