java成神之——集合框架之ArrayList,Lists,Sets

2021-06-16 19:06

阅读:644

标签:rev   pareto   ted   his   转换   元素   boolean   方式   必须   

  • 集合
    • 集合种类
    • ArrayList
      • 声明
      • 增删改查元素
      • 遍历几种方式
      • 空集合
      • 子集合
      • 不可变集合
      • LinkedList
    • Lists
      • 排序
      • 类型转换
      • 取交集
      • 移动元素
      • 删除交集元素
    • Sets
      • 集合特点
      • 常用方法
      • 根据set创建list

集合

集合种类

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

ArrayList

声明

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

List list = new ArrayList();
List list = new ArrayList();
List list = new ArrayList();
ArrayList arr = new ArrayList();

增删改查元素

List list = new ArrayList();
List list1 = new ArrayList();
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 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 iterator = list.listIterator();
    while(iterator.hasNext()) {
        System.out.println(iterator.next());
    }

空集合

List anEmptyList = Collections.emptyList();
Map anEmptyMap = Collections.emptyMap();
Set anEmptySet = Collections.emptySet();

子集合

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

不可变集合

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

LinkedList

链表,增删快,查询慢
        
LinkedList arr = new LinkedList();
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 {
        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 users = new ArrayList();
    users.add(new User(1, "小李"));
    users.add(new User(2, "小红"));
    Collections.sort(users);

第二种,传递Comparator接口实现

    Collections.sort(users, new Comparator() {
        @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 nums = Arrays.asList(1, 2, 3);
List strings = nums.stream().map(Object::toString).collect(Collectors.toList());

取交集

List list1 = new ArrayList();
List 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 list1 = new ArrayList();
List 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 set = new HashSet();                              // 快速定位,随机排序
TreeSet sortedSet = new TreeSet();                    // 按照compareTo排序,操作慢
LinkedHashSet linkedhashset = new LinkedHashSet();    // 快速定位,按照插入顺序排序,备份慢

常用方法

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

根据set创建list

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

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

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

java成神之——集合框架之ArrayList,Lists,Sets

标签:rev   pareto   ted   his   转换   元素   boolean   方式   必须   

原文地址:https://www.cnblogs.com/ye-hcj/p/9724082.html


评论


亲,登录后才可以留言!