前言:有老师总结真好,照着老师的打一遍理解下,以后能在看。
概念:
- 集合概念:
- 保存和盛装数据的容器,将许多元素组合成一个单一单元的容器对象。
- 集合框架:
- 表示和操作集合的体系,包括接口、实现类,集合框架的结构图。
- 接口:Iterable、Iterator、Collection、List、Queue、Set、Map;
- 类:ArrayList,LinkedList,HashSet,TreeSet,HashMap,TreeMap,Stack;
具体实现:
- java.lang.Iterable接口:实现了此接口类的对象,支持使用Iterable遍历元素及支持For Each循环语句;
- Iterator接口:用来遍历集合中的元素,常用方法:
- hasNext()//是否下一个元素;
- next()//向后移动游标,同时返回游标指向的元素;
- remove()//移除当前游标未知的元素;
- java.util.Collection接口:用于描述最具用通用性的集合,包含了最具有通用性的集合操作和方法;
- boolean add(),向集合添加元素。如调用更改了集合返回true,下同
- boolean addAll(),向集合添加一个集合
- boolean remove(),从集合移除中指定元素
- boolean removeAll(),从集合移除包含指定集合
- void clear(),移除集合全部元素
- boolean contains(),判断集合是否包含指定元素
- boolean containsAll(),判断是否包含包含指定集合
- boolean isEmpty(),判断集合是否包含元素
- int size() ,集合长度
- T[] toArray(,将集合转为指定类型的数组
- Iterator<E> iterator(),获取迭代器;
- java.util.List集合:有序的,允许包含重复的元素集合。除了从Collection继承的方法外,提供基于位置索引的操作方法:
- add(),将指定位置元素后移,添加
- set(),替换
- get(int index),获取
- remove(int index),移除
- List集合接口基本实现类,即不同数据结构的实现
- java.util.ArrayList,基于对象数组数据结构的实现,用的最多,整体性能好
- java.util.LinkedList,基于双向链表数据结构的实现
- List与数组的转换:
- List to Array 用toArray()方法;
- Array to List:Arrays工具类提供asList(T… a)方法 :asList()方法为适配器模式方法,仅转换了类型,底层仍是数组。因此,执行任何修改集合长度方法(add/remove等),将抛出异常
- java.util.Map接口:用于存放键值对(key-value),通过Key值获取相应的value值
- Map中key必须是唯一的,且每个key只能对应一个value;但不同key,可以对应同一个value;添加key-value时,如果key已经存在,则后一个覆盖前一个。
- 支持以任何类型(引用类型)对象为key/value
- 基本实现类:
- java.util.HashMap,查询效率与内存占用最平衡,非线程安全;
- java.util.TreeMap;
- java.util.Table
- 常用操作方法:
- put( key, value),保存键值对
- get( key),基于key获取对应的value,如果value不存在,返回null
- getOrDefault(key, VValue),获取对应的value,没有则使用默认值
- remove( key) ,去除对应的value值
- containsKey(Object key),键是否存在;
- containsValue(Object value),值是否存在;
- size() ,长度;
- isEmpty(), 是否为空;
如何判断key相同?重写hashCode()和equals()方法
String重写了hashCode()/equals()方法,因此直接基于字符串值,而非对象的hash值比较(好像大致意思是判断key相等是用key的直接基于key的字符串值判断)
Set集合:不包含重复元素(数学中集合的抽象)扑克牌,不重复的关系,人,事物等
是否重复:根据hashCode()/equals()
Set接口:只包含继承自Collection方法,并添加禁止重复元素的限制,无基于索引的操作方法;
基本实现类:
java.util.HashSet<>,元素无序(底层基于HashMap确定元素是否重复)
java.util.LinkedHashSet<>,元素有序
java.util.TreeSet <>,元素有序