001.概述
集合是Java的一种容器,它位于java.util包下,主要包括:Collection(接口)、Map(接口)、集合工具类。
002.集合结构图
003.List接口
0031.特点
- 有序的、允许有重复元素的集合
0032.主要的两个实现类:
- ArrayList:底层基于数组,内存地址是连续的
- LinkedList:底层基于双向链表,内存地址不连续
0033.ArrayList
- 元素可以为一个或多个null;
- 默认初始容量为10,当数组大小不足时,容量扩大1.5倍;
List<String> list = new ArrayList<>();
list.add("hua");
list.add("ming");
list.add("fan");
list.add(null);
list.add("hua");
list.add(null);
System.out.println(list);
//输出
[hua, ming, fan, null, hua, null]
复制代码
0034.LinkedList
- 元素可以为一个或多个null
- 同时实现List和Deque接口
0035.ArrayList和LinkedList常用的几种方法:
void add(E element) 添加元素
void add(int i,E element) 指定位置添加元素
E get(int i) 获取元素
E set(int i,E element) 替换元素
E remove(int i) 移除元素
int size() 元素数量
boolean isEmpty() 集合中没有元素,返回true
复制代码
0036.遍历的三种方式
//举以下例子
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
for(int i=0;i<10;i++){
list.add(i);
}
System.out.println(list);
//迭代器遍历
Iterator<Integer> it = list.iterator();
while(it.hasNext()){
System.out.print(it.next() +" ");
}
System.out.println();
//遍历:增强型for循环
for(Integer n:list){
System.out.print(n+" ");
}
System.out.println();
//遍历:for
for(int i=0;i<list.size();i++){
System.out.print(list.get(i)+" ");
}
}
复制代码
0037.应用场景
- ArrayList更适合查询操作;
- LinkedList更适合插入和删除操作;
004.Set接口
0041.特点
- 无序的、不允许有重复元素的集合
0042.实现类
- HashSet:底层基于HashMap实现
- TreeSet:底层基于二叉树实现
0043.HashSet
- 只允许一个null元素
Set<String> sh = new HashSet<>();
sh.add("fan");
sh.add(null);
sh.add("hua");
sh.add("ming");
sh.add("hua");//被过滤掉
sh.add(null); //被过滤掉
System.out.println(sh);//[null, fan, hua, ming]
复制代码
005.Map接口
0051.特点
- 具有映射关系的集合
- 数据以键值对(key-value)存储
0052.主要的两个实现类
- HashMap:底层基于数组+链表(JDK7及之前),数组+链表+红黑树(JDK8)
- HashTable:底层基于哈希表
0053.HashMap
- 键唯一,值可以不唯一
- 允许有null键和null值
- Entry对象是无序排列的
- 默认初始容量16,默认加载因子0.75
0054.HashMap常用方法
Object put(Object key,Object value) 添加
Object get(Object key) 查询
Object remove(Object key) 移除
int size() 长度
复制代码
0055.代码
Map<Integer,String> map = new HashMap<>();
map.put(1, "wang");
map.put(2, "li");
map.put(3, "hua");
map.put(4, null);
map.put(5, null);
map.put(2, "fan"); //直接覆盖前面相同的key的value
map.put(null, null);//key value 可以为空
System.out.println(map);//{null=null, 1=wang, 2=fan, 3=hua, 4=null, 5=null}
复制代码
0056.遍历的方式
//方式一:遍历
for(Integer i:map.keySet()){
System.out.println("key:"+i+" values:"+map.get(i));
}
//方式二:遍历
Iterator<Entry<Integer,String>> list = map.entrySet().iterator();
while(list.hasNext()){
Entry<Integer,String>entry = list.next();
System.out.println("key:"+entry.getKey()+" values:"+entry.getValue());
}
复制代码
006.工具类
- Collections、Arrays:集合的工具类帮助类,提供了对集合元素排序、搜索及线程安全等操作;
- Comparable、Comparator:一般用于对象比较来实现排序,两种略有区别;