集合Collection

集合

如何遍历集合

1、通过for循环或者增强for循环
2、通过forEach遍历
3、通过迭代器遍历
4、通过Stream流遍历

过滤(遍历过程中删除某个元素)

1、逆向遍历进行删除
2、Stream流过滤删除

        ArrayList<String> list = new ArrayList<>();
        list.add("111");
        list.add("222");
        list.add("333");
        list.add("444");
        String a = "222";

        Stream<String> stringStream = list.stream().filter(s -> s != a);
        Object[] objects = stringStream.toArray();
        System.out.println(Arrays.toString(objects));
        // list.forEach(System.out::println);

都继承了Iterable

每一个集合对象都有iterator()方法,返回一个Iterator对象 例:
快捷键 itit

List<String> l = Arrays.asList("1", "2", "3");
Iterator<String> iterator = l.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}

增强for循环(一个简化的迭代器版本) 快捷键collection.for

List<String> l = Arrays.asList("1", "2", "3");
for (String s : l) {
    System.out.println(s);
}

ArrayList

List去重

list = list.stream().distinct().collect(Collectors.toList());

遍历ArrayList

除了上面的四种方法

  • List还可以通过toString方法遍历

  • 将ArrayList转换为数组之后再遍历

  • 当ArrayList中存放的是String类型的时候 使用String类遍历

        String str = String.join(",",list);

底层结构和源码分析

transient 表示瞬间、短暂的,表示该属性不会被序列化
他其实就是一个transient 修饰的对象数组 transient Object[] elementData

扩容机制:

当你添加元素的时候超过了原数组长度,他就会进行扩容

  • 无参构造 : 默认为0,第一次扩容就是10,第二次扩容按照之前的1.5倍
  • 有参构造:默认指定多少就是多少,扩容也是1.5倍扩容

Vector

适合多线程,方法是同步方法 有 synchronize修饰,不过效率很低

HashMap

Map

获取所有的key,

Set

自带去重功能

Collection工具类

java.util.Collections

//反转
Collections.reverse(list);
//排序
Collections.sort(list);
//按比较规则进行排序
Collections.sort(list,Comparator重写里面的compare方法);
//位置交换 指定位置i和j互换元素的位置
Collections.swap(list,int i,int j);

还有查找、替换、克隆(copy)。。。

posted @ 2022-07-28 17:04  没有烦恼的猫猫  阅读(22)  评论(0)    收藏  举报