Collection
它是集合框架中的根接口,它提供了对集合的基本操作
最常用的两个子接口:
List: 有序,可重复的
Set: 无序(存取顺序不保证一致),不可重复
List:常用的实现类:
ArrayList
LinkedList
Set常用的实现类:
HashSet
TreeSet
LinkedHashSet
List
泛型: 在创建集合时,明确集合中存储数据的类型,要指定数据类型
## 1.1 ArrayList 底层数据结构是数组
创建一个ArrayList集合:
格式:ArrayList<数据类型> 集合名 = new ArrayList<>
注:数据类型不能是基本数据类型,必须是基本数据类型的包装类
基本数据类型 包装类
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean
常用方法:
增:
1、 add(e):在集合的末尾添加元素,并返回true
2、 add(index,e):在指定位置添加元素 返回类型是void
删:
1、 remove(index): 移除指定下标的元素 会返回被删除的元素
2、 remove(object): 移除第一次出现的元素对象 如果元素不存在,返回false,删除失败
3、set(index,e): 通过下标修改内容
4、get(index): 通过下标获取元素
5、clear(): 清空
6、contains(e):判断是否包含指定元素
7、isEmpty():判断集合内容是否为空
8、indexOf(e):通过指定元素获取第一次出现的下标
元素不存在则返回-1,
9、lastIndexOf(e) 通过指定元素获取最后一次出现的下标
10、size():获取集合长度
11、Collections.swap(e,i,j):
将e集合中的 i 和 j 位置的元素交换位置
遍历:
for(int i = 0 ; i <list.size() ; i ++){
//list.get(i);
}
嵌套:
1、在集合中嵌套集合:
单一集合:ArrayList<String> list1 = new ArrayList<>();
嵌套集合:ArrayList<ArrayList<String>> list = new ArrayList<>();
2、在集合中嵌套数组:
String [] str1 = {"a","c","f","g"}
String [] str2= {"s","c"}
String [] str3 = {"a","c"}
ArrayList<String[]> list = new ArrayList<>();
list.add(str1);
list.add(str2);
list.add(str3);
## 1.2 LinkedList 底层数据结构是链表
LinkedList:增删快
ArrayList: 查询快
适用场景:
LinkedList 一般用于增删频繁的业务逻辑中,常会使用在池相关的技术中
ArrayList 大多使用在查询频繁的业务逻辑中,一般 “好友列表”,“商品列表”,“订单列表” 都会使用
Set
特点: 无序(存取顺序可能不一致)、不可重复
创建:
HashSet<String> set = new HashSet<String>();
迭代器 Iterator
普通循环:
1、可以遍历 数组
2、可以遍历 List
增强for循环:(for-each)
for(数据类型 变量名: 数据源){
}
1、可以遍历 数组
2、可以遍历 List
3、可以遍历 Set
迭代器:
可以遍历: List 、Set、 Map
迭代的步骤:
1、 通过介个的iterator()方法获取迭代器对象,将迭代器与该集合绑定
2、循环,判断是否有可迭代的元素 用hasNext()方法
还有元素则使用next()方法获取
没有的话,循环终止
注:
在迭代过程中不能对集合进行增删改,会由于不确定性发生
ConcurrentModificationException
解决办法: 使用ListIterator
步骤:
# Map
Map 中数据的存储方式与其他集合不同,他的数据是以“键值对”的方式存储的
需要在创建Map集合时,明确Map中键(key)和值(value)的数据类型
表示只有通过此键值对产生的映射关系,才能确定一个确切的数据。
注:1、键是唯一的(当键重复时,会覆盖掉之前的)
2、值可以重复
3、map也是无序的(存取顺序不一致)
实现类:
HashMap
TreeMap
LinkedHashMap
常用方法:
1、put(k, v):将k-v键值对存储到map中,并返回被覆盖的v
2、remove(k):通过键,删除整个键值对,并返回删除的值
3、remove(k, v):只有键和值相匹配时才能删除,并返回布尔值
4、replace(k, v):通过键,去修改键对应的值,并返回被替换掉的值
5、replace(k, old v, new v):只有键和旧值匹配时,才用新值替换旧值,并返回布尔值
6、get(k): 通过键,获取值
### Map的迭代方法:
Map不能使用普通或增强for循环
Map不是数组,也不是iterator实例,Map不同于List、set、,这两个都继承了
Collection,而collection继承了Iterator,所以List、Set就是Iterator的实例,所以不仅可以使用for循环,也可以用iterator迭代器迭代
1、keySet():调用 map.keySet()会返回map中所有键组成的set集合
//通过keySet方法获取map集合中所有键组成的集合
Set<String > set = map.keySet();
//通过set的iterator方法获取set集合的迭代器对象
Iterator<String> iterator = set.iterator();
//循环判断并获取
for(;iterator.hasNext();){
//获取键
String key = iterator.next();
System.out.println(key+"="+map.get(key));//通过建,获取值
}
2、entrySet()
//通过Map的entrySet方法获取map中所有键值对的映射关系所组成的set集合
//关系是两个值,有键有值,所有要用Entry<String,String>
Set<Entry<String,String >>set=map.entrySet();
//通过set的iterator方法获取迭代器对象
Iterator<Entry<String, String>> it=set.iterator();
//循环判断并获取
while(it.hasNext()){
//映射关系对象
Entry<String, String> entry = it.next();
//获取映射关系的key和value
String key = entry.getKey();
String value = entry.getValue();
System.out.println(key+"="+value);
}