java成神之——集合框架之arraylist,lists,sets

叶家伟的博客      2022-04-13     658

关键词:

集合

集合种类

List<String> list = new ArrayList<>(data); 
Set<String> set1 = new HashSet<>(data); // 值不重复
SortedSet<String> set2 = new TreeSet<>(data); // 值有序并且不重复
Set<String> set3 = new LinkedHashSet<>(data); // 值顺序固定并且不重复
Map<String, Object> map1 = new HashMap<>(map);
SortedMap<String, Object> map2 = new TreeMap<>(map);

ArrayList

声明

ArrayList是顺序表,增删慢,查询快,有序可重复集合
只能用来存储自定义应用类型和包装类型 Byte Short Integer Long Float Double Character Boolean

List list = new ArrayList();
List<String> list = new ArrayList<String>();
List<String> list = new ArrayList<>();
ArrayList<Integer> arr = new ArrayList<Integer>();

增删改查元素

List<Integer> list = new ArrayList<Integer>();
List<Integer> list1 = new ArrayList<Integer>();
list.add(1); 
list1.add(2);
list.addAll(list1);

list.add(11);
list.add(1, 33);
list.set(0, 33);
list.remove(0);
list.clear();
list.get(0)
list.size()

遍历几种方式

第一种

    List<String> list = new ArrayList<>(Arrays.asList("a", "b", "c"));
    list.forEach(System.out::println);

第二种

    list.parallelStream().forEach(System.out::println);

第三种

    for (String item : list) {
        System.out.println(item);
    }

第四种

    ListIterator<String> iterator = list.listIterator();
    while(iterator.hasNext()) {
        System.out.println(iterator.next());
    }

空集合

List<String> anEmptyList = Collections.emptyList();
Map<Integer, Date> anEmptyMap = Collections.emptyMap();
Set<Number> anEmptySet = Collections.emptySet();

子集合

List<String> list = new ArrayList<>(Arrays.asList("a", "b", "c"));
List<String> list1 =  list.subList(0,2); // [a, b]

不可变集合

List<String> list = new ArrayList<>(Arrays.asList("a", "b", "c")); 
List<String> list1 = Collections.unmodifiableList(list); // 不能修改值
List<String> unmodifiableList = Collections.singletonList("Only string in the list"); // 只有一个元素的不可变集合

LinkedList

链表,增删快,查询慢
        
LinkedList<String> arr = new LinkedList<String>();
arr.add("a");
arr.addLast("c");
arr.addFirst("b");
arr.getFirst();
arr.getLast();
arr.removeFirst();
arr.removeLast();
arr.clear();

Lists

排序

方式一,实现Comparable接口

    public class User implements Comparable<User> {
        private Integer id;
        private String name;

        public User(Integer id, String name) {
            this.id = id;
            this.name = name;
        }

        @Override
        public int compareTo(User u) {
            return id.compareTo(u.id);
        }

        public void setId(Integer id) {
            this.id = id;
        }

        public Integer getId() {
            return id;
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getName() {
            return name;
        }
    }

    List<User> users = new ArrayList<User>();
    users.add(new User(1, "小李"));
    users.add(new User(2, "小红"));
    Collections.sort(users);

第二种,传递Comparator接口实现

    Collections.sort(users, new Comparator<User>() {
        @Override
        public int compare(User s, User e){
            return s.getId().compareTo(e.getId());
        }
    });

第三种,lambda表达式

    Collections.sort(users, (s, e) -> s.getId().compareTo(e.getId()));

第四种,实现类sort

    users.sort((s, e) -> s.getId().compareTo(e.getId())); 

类型转换

List<Integer> nums = Arrays.asList(1, 2, 3);
List<String> strings = nums.stream().map(Object::toString).collect(Collectors.toList());

取交集

List<Integer> list1 = new ArrayList<>();
List<Integer> list2 = new ArrayList<>();
list1.addAll(Arrays.asList(new Integer[]{1,2,3}));
list2.addAll(Arrays.asList(new Integer[]{1,2,4}));
list1.retainAll(list2);

移动元素

Collections.reverse(list);                  // 反转
Collections.rotate(list1, 1);               // 集合元素整体循环后移一位
Collections.shuffle(list1);                 // 重排元素

Random random = new Random(12);
Collections.shuffle(list1, random);         // 随机重排,只会随机一次

删除交集元素

List<Integer> list1 = new ArrayList<>();
List<Integer> list2 = new ArrayList<>();
list1.addAll(Arrays.asList(new Integer[]{1,2,3}));
list2.addAll(Arrays.asList(new Integer[]{1,2,4}));
list1.removeAll(list2); // [3]

Sets

集合特点

Hash集合底层数据结构是散列表,所以要求元素必须不重复,避免地址对应冲突
Hash集合访问的直接是数据地址,查询元素最快,增删元素也快

HashSet集合处理地址冲突的方法使用开放定址法
HashSet是无序无重复元素集合,使用方法和ArrayList类似

LinkedHashSet集合处理地址冲突的方法使用链地址法

Set<T> set = new HashSet<T>();                              // 快速定位,随机排序
TreeSet<T> sortedSet = new TreeSet<T>();                    // 按照compareTo排序,操作慢
LinkedHashSet<T> linkedhashset = new LinkedHashSet<T>();    // 快速定位,按照插入顺序排序,备份慢

常用方法

set.add(12); 
set.clear(); 
set.contains(0);
set.isEmpty();
set.remove(0);
set.size(); 

根据set创建list

Set<String> set = new HashSet<String>();
set.add("a");
set.add("b");

方式一
    List<String> list = new ArrayList<String>();
    list.addAll(set);

方式二
    List<String> list = set.stream().collect(Collectors.toList());

深入理解java集合框架之---------arraylist集合

ArrayList简介  ArrayLIst是动态数组,用MSDN的说法就是Array的复杂版本,它提供了动态的增加和减少元素,实现了Collection和List接口,可以灵活的设置数组的大小,要注意ArrayLIst并不是线程安全的。因此一般建议在单线程中使用Arra... 查看详情

java成神之——文件io

文件I/OPathFilesFile类File和Path的区别和联系FileFilterFileOutputStreamFileInputStream利用FileOutputStream和FileInputStream复制文件FileWriterFileReaderBufferedWriterBufferedReader基本用法StringWriterInputStreams转换成字符串Buffe 查看详情

如果天空不是集合框架阅读列表整理

...01之总体框架Java集合系列02之Collection架构Java集合系列03之ArrayList详细介绍(源码解析)和使用示例 Java集合系列04之fail-fast总结(通过ArrayList来说明fail-fast的原理、解决办法) Java集合系列05之L 查看详情

springboot成神之——websocket发送和请求消息

本文介绍如何使用websocket发送和请求消息项目目录依赖DemoApplicationMessageModelWebConfigWebSocketConfigHttpHandshakeInterceptorWebSocketEventListenerWebSocketController前端测试本文介绍如何使用websocket发送和请求消息项目目录依赖<dependency>&l 查看详情

java成神之——httpurlconnection访问api

HttpURLConnection访问get资源访问post资源访问Delete资源获取状态码结语HttpURLConnection访问get资源HttpURLConnectionconnection=(HttpURLConnection)newURL("http://ip/test").openConnection();intresponseCode=connection.getResponse 查看详情

springboot成神之——拦截器

本文介绍springboot拦截器创建拦截器类LogInterceptor.java创建拦截器类OldLoginInterceptor.java拦截器配置类WebMvcConfig.java路由InterceptorController.java本文介绍springboot拦截器创建拦截器类LogInterceptor.javapackagecom.springlearn.learn.interc 查看详情

深入理解java集合框架之---------arraylist集合-----构造函数

ArrayList有三个构造方法ArrayList有三个常量1、privatetransientObject[]elementData(数组);2、privateintsize(元素个数)1、ArrayList(intinitialCapacity);构造一个初始容量的集合/** *序列化 */ privatestaticfinallongserialVersionUID=-62778248752 查看详情

java集合框架之arraylist

废话不多说直接进入正题,本文将一步步来分解ArrayList:先看下ArrayList主要的成员变量:/***Defaultinitialcapacity.默认初始化容量10*/privatestaticfinalintDEFAULT_CAPACITY=10;/***Sharedemptyarrayinstanceusedforemptyinstances.*/privatestaticfinal 查看详情

java成神之——安全和密码

安全和密码加密算法公钥和私钥加密解密生成私钥和公钥加密数据解密数据公钥私钥生成的不同算法密钥签名生成加密随机数基本用法指定算法加密对象SealedObjectSignature结语安全和密码加密算法MessageDigestmd5=MessageDigest.getInstance("M... 查看详情

java成神之——fork/join基本使用

Fork/Join大任务分小任务,小任务结果合并ForkJoinPoolpool=newForkJoinPool();RecursiveTask<Integer>task1=newRecursiveTask<Integer>(){@OverridepublicIntegercompute(){return100+100;}};RecursiveTask<Integer 查看详情

java成神之——enum枚举操作

枚举声明枚举遍历枚举在switch中使用枚举比较枚举静态构造方法使用类来模拟枚举枚举中定义抽象方法枚举实现接口单例模式使用静态代码快EnumSetEnumMap结语枚举声明基本使用publicenumChineseNumber{YI,ER,SAN,SI}ChineseNumber.values();//["YI","E... 查看详情

深入理解java集合框架之---------arraylist集合-----添加方法

Arraylist集合-----添加方法1、add(Ee)向集合中添加元素  /** *检查数组容量是否够用 *@paramminCapacity */ publicvoidensureCapacity(intminCapacity){ modCount++; intoldCapacity=elementData.length; if(minCapacity>oldCapacity){ 查看详情

java成神之——注释修饰符

注释修饰符自定义注释元注释通过反射在runtime访问注释内置注释多注释实例错误写法使用容器改写使用@Repeatable元注释注释继承使用反射获取注释获取类的注释获取方法的注释结语注释修饰符自定义注释元注释用来注释自定义注... 查看详情

第一节:java集合框架之arraylist

...1)线性表(2)顺序表A:顺序表定义B:顺序表实现三:ArrayList(1)介绍(2)使用A:构造方法(2)常见操作(3)ArrayList遍历(4)ArrayList扩容 查看详情

集合框架

...ava.utill Java集合框架分为2大接口:n CollectionuList(ArrayList、LinkedList)uSet(HashSet、TreeSet)n MapuHashMapuTreeMapl 集合框架的优点?解决数组的一些不足之处(存储数 查看详情

java成神之——java中string的用法

java中String的用法String基本用法String分割String拼接String截取String换行符和format格式化String反转字符串和去除空白字符String获取指定位置字符和replace的使用StringBuffer的使用字符串转换基本类型的转换添加字符编码Base64的编码和解码... 查看详情

java成神之——jaxb操作xml的基本使用

JAXB依赖读取xml配置写配置自定义写配置结语JAXB依赖<dependency><groupId>javax.activation</groupId><artifactId>activation</artifactId><version>1.1.1</version></dependency>< 查看详情

java成神之——properties,lambda表达式,序列化

Properties加载defaults.properties文件写Properties到xml文件读Properties从xml文件Lambda表达式自定义内置sort方法中使用Lambada序列化文件序列化Gson序列化Jackson序列化Comparable和ComparatorComparable对象排序Comparator对象排序结语Properties加载defaults.pr... 查看详情