1.集合和数组的区别
集合:长度可变,可以存放不同类型的元素,只能存放引用类型
数组:长度固定,只可以存放相同的同种类型的元素,可以存放数据类型也可以存放引用类型
2.java工具类 如下图:
.
3.List、Set、Map是这个集合体系中最主要的三个接口。List和Set继承自Collection接口。 Map也属于集合系统,但和Collection接口不同。
1.Set不允许元素重复。HashSet和TreeSet是两个主要的实现类。Set只能通过游标来取值,并且值是不能重复的。
2.List有序且允许元素重复。ArrayList、LinkedList和Vector是三个主要的实现类。ArrayList 是线程不安全的, Vector 是线程安全的,这两
个类底层都是由数组实现的 LinkedList 是线程不安全的,底层是由链表实现的
3.Map 是键值对集合,其中key列就是一个集合,key不能重复,但是value可以重复。HashMap、TreeMap和Hashtable是Map的三个主要的实现类。
HashTable 是线程安全的,不能存储 null 值 HashMap 不是线程安全的,可以存储 null 值
4..Collection 集合接口(没有获取元素的方法,在其子类中有)(主要说上图带有红框的部分)
Collection中的存放的数值可以重复,有序
List 和 Set接口继承Collection接口,
LIst接口可以由Vector,ArrayList,LinkedLIst实现
Set接口可以由HashSet,SortedSet实现
-
Collection 中的主要方法有(前者为返回值类型,后面是方法)(红色的为重要的方法)
- boolean add(Object element):向此collection中添加元素
- Int size():返回此collection中的元素个数(或者是集合的长度)
- boolean isEmpty():判断此collection中是否包含元素
- boolean contains(Object obj):判断此collection是否包含指定的元素
- boolean containsAll(Collection c):判断此collection是否包含指定collection中的所有元素
- boolean addAll(Collection c):将指定collection中的所有元素添加到此collection中
- boolean remove(Object element):从此collection中移除指定的元素(第一个与之匹配的数值)
- boolean removeAll(Collection c):移除此collection中包含在指定collection中的所有元素
- void clear():移除collection中所有的元素
- boolean retainAll(Collection c); 仅保留此collection中和指定collection的交集元素
- Iterator iterator():返回此collection元素的迭代器
- Object[] toArray():把此collection转成数组
-
List集合的主要方法(Collection接口中存在的方法,list接口可调用)还额外扩充了一些常用方法:
- Object get(int index) 获取指定位置索引的元素
- void add(int index, Object element);在指定位置插入指定元素,其他元素依次后移
- Object set(int index, Object element) 用指定元素替换指定位置的元素
- List subList(int fromIndex, int toIndex) 返回列表中指定的fromIndex(包括 )和 toIndex(不包括)之间的部分列表
- int indexOf(Object o) 根据元素获得索引;如果此列表不包含该元素,则返回 -1。(从左到右的第一个元素)
- int lastIndexOf(Object o)根据元素获得索引;如果此列表不包含该元素,则返回 -1。(从右到坐的第一个元素)
-
ArrayList是List接口的实现类,底层使用数组结构实现(调用的方法可以在List中找)在这里说Arraylist的三种遍历方式
- 先创建一个集合
-
使用索引遍历
2.使用Object类型的遍历
3.迭代器遍历
//hasNext()判断是否有下一个元素
//next()获取下一个元素
ArrayList排序
想要实现排序,集合中所存放的数据类型
这个类必须实现compareto接口(重写compareto方法)
在Java中数组排序的方法是java.util.Arrays.sort(数组)
-
LinkedList是List接口的另一个常用实现类,底层使用双向链表实现
- LinkedList除了实现List接口外,还实现了Queue接口,并提供了对列表开头、结尾操作的方法,使得LinkedList具有栈、队列的双重特点。
- 栈:后进先出,LastInFirstOut,LIFO
- 入栈 push()(添加元素);出栈 pop()(删除栈顶元素)(弹栈);
- 队列:后进后出,LastInLastOut,LILO
- 入队 offer()(添加元素); 出队poll()(删除队首元素);
- add() 添加元素 addLast()在此时的队尾添加元素 addfirst() 在此时的队首添加元素
- offerLast() 在此时的队尾添加元素
- get(int index):返回此列表中指定位置处的元素 getFirst():返回此列表的第一个元素 getLast():返回此列表的最后一个元素
- peek():获取但不移除此列表的头(第一个元素)
- peekFirst():获取但不移除此列表的第一个元素 peekLast():获取但不移除此列表的最后一个元素
- pollFirst():获取并移除此列表的第一个元素 pollLast():获取并移除此列表的最后一个元素
ArrayList和LinkedList对比
1.查找元素时,ArrayList效率高
2.进行插入和删除元素时,LinkedList效率高
5.Set接口:set中存放的元素是无序的(存放顺序)无重复数据 无获取索引的方法
Set接口常用实现类:
HashSet: 不记录添加数据的顺序,且加入的元素不能重复,否则覆盖。(基于哈希散列,Set存、取、删 都有较高的效率)
加入HashSet集合的自定义类型的对象通常需要重写hashCode()和equals()方法。通过hashcode()获取到任何一个对象的哈希码值
hashCode()用于判断是否是同一类型的,equals()标记,根据哪个属性排序
TreeSet 同样不记录添加数据的顺序,但是可以对存入的元素进行排序(基于红黑树实现),输出也会按照排序后的顺序 (排好序的)
LinkedHashSet 根据元素的哈希码进行存放,同时用链表记录元素的插入顺序(有序的:存取数据的位置无变化)
set常用的方法:
add()添加
remove()删除
clear()清空
6.Map接口:Map接口用来存储“键-值”映射对
Map中存储的“键-值”映射对是通过键来唯一标识,Map的“键”底层采用Set来存放。 因此,存入Map中的“键”如果是自定义类,应该重写hashCode()和equals()方法,确保键的唯一 常用String作为Map的"键"。
1.常用的方法
put(K key, V value):将指定的"键-值"对存入Map中
get(Object key):返回指定键所映射的值
int size():获得此Map中"键-值"对的数量
remove(Object key):根据指定的键把"键-值"对从Map中移除
*boolean containsKey(Object key):判断Map是否包含指定的键
*boolean containsValue(Object value):判断此Map是否包含指定的值
boolean isEmpty():判断此Map中是否有元素
void clear():清空Map中的所有"键-值"对
Set<K> keySet():返回此Map中包含的键的Set集合。
Collection<V> values():返回Map中包含值的Collection集合
replace(Object key,Object values)替代指定key值得values值
2.HashMap内部对“键”使用Set进行散列存放。因此,根据“键”取“值”的效率较高,也是Map接口使用频率较高的一个实现类。
①通过key值 获得value值
获取集合中所有key值(get)
用foreach语句循环遍历key值 得到value值
②获取集合总所有value值
③获取map集合中成对的数据
Map.Entry是Map内部定义的一个static接口,专门用来保存key-value对的内容。
通过entrySet()方法取到Entry对象,然后使用getKey(),getValue()获取键、值 一般情况下,map多用于存放、查找数据,遍历输出的情况较少。
3.TreeMap
TreeMap内部使用红黑树结构对“key”进行排序存放,所以放入TreeMap中的“key-value”对的“key”必须是“可排序”的
4.区别
HashMap的键采取哈希值存储,不记录元素插入的位置,也不排序
TreeMap的键采取红黑树存储,不记录元素插入的位置,但是可以排序
LinkedHashMap的键采取哈希值存储,并使用链表记录元素插入的位置,不排序
5.选择使用集合
存放要求
无序,无下标,不可重复,不能随机访问-Set
有序,有下标,可重复,可以随机访问-List
“key-value”对,较多存放,较少遍历-Map
读和改(插入删除)的效率
Hash-两者都较高
ArrayList-读(指定下标随机访问)快,插入/删除元素慢
LinkedList-读(指定下标随机访问)慢,插入/删除元素快
//^_^本人新人,以上是上课记得笔记和自己的理解,如有异议,欢迎一起讨论