集合(重点)
Collection
Collection中常用的方法
迭代器
用来循环遍历出集合中的所有元素
Iterator<E> iterator()
Iterator iterator = list.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
List
ArrayList(重要)
有序数组集合,且允许有重复的元素,使用者可以精确的控制每个元素的插入位置,并且可以快速访问。特点:有序(存储与取出顺序一致),且元素可以重复。
不是线程安全的。没有加锁(synchronized)
LinkedList
LinkedList(底层数据结构属于双链表,查询慢,增删快)
不是线程安全的。
LinkedList是链表为原理,添加、删除的性能高,查询的性能不高
没有加锁(synchronized)
Vector
和ArrayList功能相似,底层也是数组,最主要的区别在于vector是线程安全的,缺点是效率比较低
是线程安全的
有加锁(synchronized)
泛型(重要)
我们在项目中使用集合基本都是存储同一种的数据类型,既然我们在集合中存储同一种数据类型,那我们事先就知道这个集合要存储什么数据类型,我们就能预先的指定要存储的类型
自定义泛型(重要)
语法:
class/interface 类名/接口名 <T>{
}
T只是泛型的一个标准,使用什么字符都可以,但是都要大写,不要使用特殊字符,建议通T。
Set
HashSet
特点:
元素的唯一性
无序性
允许存在一个null
不是线程安全的
唯一性原理:
对象的hash值和equals都相等,那么就是重复的对象。
LinkedHashSet
说明: 具有可预知迭代顺序的Set接口的哈希表和链表实现,此实现与HashSet的不同之处在于,后者维护着一个运行于所有条目的双重链接列表,此链接列表定义了迭代顺序,即按照将元素插入到set中的顺序(插入顺序)进行迭代
特点:
元素的唯一性
有序的
允许null存在一个
不是线程安全的
LinkedHashSet和HashSet对比就是多了一个顺序,应用的不多。
TreeSet
TreeSet可以支持自定义排序,如果TreeSet所存储的对象的类没有实现Comparable接口就会报错ClassCastException。所以我们如果想要使用TreeSet来对自定义的对象来排序,必须实现Comparable接口。
特点:
元素唯一性
可自定义排序
不允许null存在
不是线程安全的
- 先说比较 : 类如果要比较规则,要实现Comparable接口
工具类
Arrays(数组工具类)
数组的工具类,这里的方法都是静态的
1.对任意数组排序 Arrays.sort(); // 正序
2.数组转成List Arrays.asList(不定参数)
Map(重点)
map是一个有键值对的集合
List集合
index | 0 | 1 | 2 |
值 | Student1 | Student2 | Student3 |
Map是一个键值对集合
key | 3101 | 3102 | 3103 |
value | Student1 | Student2 | Student3 |
1.我们可以通过key来获取对应的值,将键值映射到值的对象。
2.一个map的key是不能重复的。
3.键只能有一个空值,值可以有多个空值
4.map也是无序的
Map<K,V> K和V表示泛型,map的k和V可以是任何类型(不能是基本的数据类型)
Map和Collection集合的区别
1.Map集合是键值对的集合,Collection是单一出现的数据集合。
2.Map的键是唯一的,而Collection的子接口中,List集合是可以重复的,set是唯一的。
常用的方法:
put(key,value): 存数据
get(key); 根据key获取值
remove(key): 删除值
keySet():获取key集合
HashMap(重要)
1.HashMap是map的实现类
2.允许多个null值和一个null键
3.没有顺序
4.不是线程安全的
TreeMap
1.可以按照key来做排序(该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的Comparable进行排序)
2.key不能为null,key不能重复,值可以有多个null
3.不是线程安全的
4.有顺序
Hashtable
1.HashTable是map的实现类
2.不允许有任何的null键和null值
3.是线程安全的
4.无顺序
LinkedHashMap
1.是map的实现类
2.允许一个null键和多个null值
3.是有顺序的(按照添加的顺序)
4.不是线程安全的