集合简介和运用

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 list1 = new ArrayList<>();

嵌套集合:ArrayList<ArrayList> 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 set = new HashSet();

迭代器 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 set = map.keySet();
//通过set的iterator方法获取set集合的迭代器对象
Iterator 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);
}

posted on 2019-08-17 15:40  半缘卿  阅读(133)  评论(0)    收藏  举报

导航