数据是有顺序(添加的先后顺序)的,数据是可以重复。
ArrayList:内部结构是数组。比较适合做高频率的查找,遍历。
LinkedList:双向链表。比较适合做高频率的新增和删除。
Vector:和ArrayList几乎一模一样。
面试题:
1.Collection和Map接口的区别
2.ArrayList和LinkedList的区别
3.ArrayList和Vector的区别
- public class Ch01 {
-
-
- public static void main(String[] args) {
- // List
list = new LinkedList<>(); - LinkedList
list = new LinkedList<>(); - list.add("a");
- list.add("b");
- list.add("c");
- list.add("d");
-
- // 我们在创建对象的时候用的是多态
- // 父类对象---子类引用
- // 我们创建出来的对象只能够调用父类和子类中都有的方法
- list.addFirst("z");
- list.addLast("x");
-
- list.removeFirst();
- list.removeLast();
-
- // 根据下标索引获取指定位置的元素
- System.out.println(list.get(2));
-
- System.out.println(list);
- }
- }
List:有顺序,元素可以重复,顺序指的是添加的先后顺序
Set:没有顺序,元素不可以重复,顺序指的是添加的先后顺序
Set其实是有顺序,内部有一个专门排序的算法。
1.所谓的无序不等于随机
2.所谓的无序指的是没有按照添加的先后顺序,其实内部是做了排序的。
面试题:
1.List和Set的区别
2.HashSet和LinkedHashSet的区别和联系
TreeSet
排序规则:
要排序的对象的类必须实现Comparable接口
LinkedHashSet:在添加数据的同时维护数据的添加顺序
效率要比HashSet略低一些。
比较接口:
Comparable接口:自然排序,排序规则是固定。
Comparator接口:临时排序
- public class Ch06 {
-
- public static void main(String[] args) {
- List
list = new ArrayList<>(16); - list.add(new Person("张岳",1100));
- list.add(new Person("李四",1010));
- list.add(new Person("刘海柱",1020));
-
- // list.sort(new Comparator
() { - // @Override
- // public int compare(Person o1, Person o2) {
- // return 0;
- // }
- // });
- list.sort((o1,o2) -> {
- if(o1.getId() < o2.getId()){
- return -1;
- }
- if(o1.getId().equals(o2.getId())){
- return 0;
- }
- return 1;
- });
- System.out.println(list);
- }
- }
Iterator主要用于迭代访问(即遍历)Collection中的元素,JDK专门提供一个接口java.util.Iterator
1、迭代
即Collection集合元素的通用获取方式。在取元素之前先要判断集合中有没有元素,如果有,就把
这个元素取出来,继续在判断,如果还有就再取出出来。一直把集合中的所有元素全部取出。这种
取出方式专业术语称为迭代。

迭代器对象Iterator中的方法
boolean hasNext()如果仍有元素可以迭代,则返回true
Object next() 返回迭代的下一个元素
1.存储对值K-V key-value
2.key不能重复,value是可以重复的
3.没有顺序(添加的先后顺序)
HashMap内部存储结构:
jdk1.7之前:链表 + 数组
jdk1.7及之后:链表 + 数组 + 红黑树
HashMap基本上面试90%问原理!!!
- public class Ch07 {
-
- public static void main(String[] args) {
- Map
map = new HashMap<>(); - map.put("1001","张岳");
- map.put("1002","赵红兵");
- map.put("1003","小北京");
- map.put("1004","李四");
- map.put("1004","张浩然");
- map.put("1005","张浩然");
-
- System.out.println(map);
- System.out.println(map.get("1003"));
- System.out.println(map.values());
- System.out.println(map.keySet());
-
- }
- }
Hashtable和HashMap几乎一模一样
面试题:
Hashtable和HashMap的区别
1.HashMap是线程异步,线程不安全的,Hashtable是线程同步,线程安全
2.HashMap的key是可以为null的,Hashtable是不可以为null
Properties:属性
Properties是Hashtable的子类,更多地是用来操作属性文件。
其他的集合:
1.LinkedHashMap,在HashMap的基础上维护了一个双向链表。
2.TreeMap:天然支持排序
3.Collections:Collections是一个工具类
1.如何创建需要的集合。多态
2.主要用到的是List和Map
3.各种区别?
4.各种集合API的调用
5.两个比较接口
6.各种集合的特点,从接口层面,到实现类层面
7.重点集合的内部结构。ArrayList,HashSet,HashMap
8.各种集合的遍历
9.并发问题
最重要的集合:
ArrayList、HashMap