集合Day12

Collection

它是集合框架中的跟接口,它提供了对集合的基本操作

常用子接口:
List:有序,可重复的
Set:无序(存取顺序不保证一致),不可重复的

List常用实现类:
ArrayList
LinkList

Set常用实现类:
HashSet
TreeSet
LinkedHashSet

泛型:
在创建集合时,明确集合中存储数据的类型,要制定数据类型
泛型中不能指定基本数据类型,要指明基本数据类型对于的包装类
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean

List

1.1ArrayList

底层数据结构时数组的一种List集合

常用方法:
1、add(e):在集合的末尾添加元素,并返回true
2、add(index ,e):在指定位置上添加元素
3、remove(index):删除指定位置上的元素,返回被删除的元素
4、remove(object):删除第一次出现的元素对象,如果该对象不存在则删除失败返回false
5、set(index ,e):将新值e替换指定位置上的原始数据,并返回被替换的原始值
6、get(index):通过下标获取指定元素
7、clear():清空集合
8、contains(object):判断集合中是否包含指定元素
9、isEmpty():判断集合中内容是否为空
10、indexOf(object):根据指定元素返回第一次出现的下标,元素不存在返回-1
11、lastIndexOf(object):根据指定元素返回第一次出现的小标,元素不存在返回-1
12、size():返回集合的元素个数
13、addAll(collection e):将e集合添加到集合的末尾
14、addAll(index,collection e):将e集合添加到集合的指定位置
15、containsAll(collection e):判断是否包含指定集合中的元素
16、removeAll(collection e):从原籍和中删除两结合的交集
17、retainAll(collection e):将集合的交集存到原集合中
18、equals(collectione):判断两级和的元素是否完全相同(顺序)

遍历:
for(int i = 0;i < list.size();i++){
// list.get(i);
}
嵌套:
将集合作为另一个集合的子元素

1.2 LinkedList

底层的数据结构是链表
LinkedList:增删快
ArrayList:查询快
适用场景:
LinkedList一般用于增删频繁的业务逻辑中,常会使用在池相关的技术中
ArrayList大多使用在查询频繁的业务中,一般“好友列表”,“商品列表”,“订单列表”都会使用ArrayList

Set

特点:无序(存和取的顺序不一致),不可重复

迭代器

普通循环:
可以遍历数组、List
增强for循环:
可以遍历数组、List、Set
可以遍历List、Set、Map
迭代的步骤:

  • 通过集合的iterator()方法获取迭代器对象,将迭代器与该集合绑定
  • 循环,判断是否有可迭代的元素hasNext()
    • 有,则使用next()获取
      • 没有,则循环终止

注:
在迭代的过程中不能对集合进行增删改,会由于不确定性发生ConcurrentModificationException。
解决办法: 使用ListIterator
步骤:
1、通过list的litIterator()获取使用ListIterator对象
2、使用ListIterator的方法对集合进行改动

ListIterator的方法
1、add(e)
2、remove()
3、set(e)
4、nextIndex():获取下一个可迭代元素的下标
5、previousIndex():获取上一个元素的下标
6、previous():获取上一个元素

Map

Map接口中数据的存储方式与其他集合不同,它的数据是以键值对的形式进行存储的。
需要在创建Map集合时,明确Map中键(key)和值(value)的数据类型。
表示只有通过此键值对产生映射关系,才能确定一个确切的数据。

注:
1、键必须唯一
2、值可以重复
3、Map是无序的
实现类:
HashMap
TreeMap
LinkedHashMap

常用方法:
1、put(k,v):将k-v对存储到map中,并返回被覆盖的v
2、remove(k):通过k删除整个k-v对,并返回被删除的v
3、remove(k,v):只有键值对匹配时,才能删除,返回是否删除成功
4、replace(k,v):将v替换指定k上的旧值,并返回被替换的值
5、replace(k,oldValue,newValue):只有键和旧值匹配时,采用新值替换旧值,返回是否替换成功
6、get(k):通过k返回对应的v
7、isEmpty():判断map是否为空
8、clear():清空map集合
9、size():获取map集合长度
10、containsKey(k):判断是否包含指定的键
11、containsValue(v):判断是否包含指定的值

Map的迭代

注:Map不能使用普通循环也不能使用增强for循环
原因是:Map不是数组,也不是Iterable的实例,Map不同于List、set,List、set都继承了Collection,而Collection继承了Iterable,所以List、Set就是Iterable的实例,不仅可以获取Iterator对象,还能使用增强for循环。

KeySet()
// 通过keySet方法获取map集合中所有键组成的集合
Set set = map.keySet();
// 通过set的iterator方法获取set集合的迭代器对象
Iterator it = set.iterator();
// 循环判断并获取
while(it.hasNext()){
String key = it.next();
System.out.println(key +" = "+ map.get(key));
}

entrySet()
// 通过map的entrySet方法获取map中所有键值对的映射关系所组成的set集合
Set<Map.Entry<String, String>> set = map.entrySet();
// 通过set的iterator方法获取迭代器对象
Itrator<Map.Entry<String, String>> it = set.iterator();
// 循环判断并获取
while(it.hasNext()){
Map.Entry<String, String> en = it.next();
String key = en.getKey();
String value = en.getValue();
System.out.println(key +" - "+ value);
}

Collections

// 打乱
public static void f1(List<Integer> list){
    Collections.shuffle(list);
}
// 交换
public static void f2(List<Integer> list){
    Collections.swap(list, 0, list.size()-1);
}    
// 倒置
public static void f3(List<Integer> list){
    Collections.reverse(list);
}
// 填充
public static void f4(List<Integer> list){
    Collections.fill(list, 666);
}
// 拷贝,必须保证目标集合中有数据,且长度大于等于原始集合
public static void f5(List<Integer> list){
    Collections.copy(newList,list);
}
// 求最大值
public static void f6(List<Integer> list){
    System.out.println("最大值:"+Collections.max(list));
}
// 求最小值
public static void f7(List<Integer> list){
    System.out.println("最小值:"+Collections.min(list));
}
// 排序
public static void f8(){
    List<String> list = new Vector<>();
    /*list.add("qbl");
    list.add("Cxk");
    list.add("cb");
    list.add("zjl");
    list.add("lh");
    list.add("wyf");*/
    list.add("刴");
    list.add("刳");
    System.out.println(list);
   Collections.sort(list);
    System.out.println(list);     
    /*System.out.println('\u5234');
    System.out.println('\u5233');*/
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值