集合

集合种类

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成神的系列文章之一

如果你想知道,但是本文没有的,请下方留言

我会第一时间总结出来并发布填充到本文

java成神之——集合框架之ArrayList,Lists,Sets的更多相关文章

  1. java成神之——集合框架之队列,栈,集合并发

    集合 队列和双端队列 PriorityQueue Deque BlockingQueue Queue 栈 集合并发 线程锁 线程安全集合 结语 集合 队列和双端队列 PriorityQueue 此队列 ...

  2. java成神之——集合框架之Maps,Hashtable

    集合 Maps HashMap 创建和初始化map 遍历方式 LinkedHashMap WeakHashMap TreeMap 线程锁 Hashtable 结语 集合 Maps HashMap Ma ...

  3. java成神之——集合框架之Array

    Array 初始化 填充元素的几种方式 数组转流 遍历 数组转成字符串 排序 查找 数组扩大 原始类型数组和包装类型数组转换 移除元素 比较数组是否相等 克隆 类型转换 过滤元素 结语 Array 初 ...

  4. Java集合框架之ArrayList浅析

    Java集合框架之ArrayList浅析 一.ArrayList综述: 位于java.util包下的ArrayList是java集合框架的重要成员,它就是传说中的动态数组,用MSDN中的说法,就是Ar ...

  5. java成神之——Stream和Optional

    Stream流 基本使用 流关闭 平行流 流重用 iterator转换成流 分组计数 无限流 流转集合 压缩流 统计数值流 集合转换流遍历 流拼接 reduce 使用流生成随机字符串 流的包装流 几种 ...

  6. java成神之——ImmutableClass,null检查,字符编码,defaultLogger,可变参数,JavaScriptEngine,2D图,类单例,克隆,修饰符基本操作

    ImmutableClass null检查 字符编码 default logger 函数可变参数 Nashorn JavaScript engine 执行脚本文件 改变js文件输出流 全局变量 2D图 ...

  7. Java成神路上之设计模式系列教程之一

    Java成神路上之设计模式系列教程之一 千锋-Feri 在Java工程师的日常中,是否遇到过如下问题: Java 中什么叫单例设计模式?请用Java 写出线程安全的单例模式? 什么是设计模式?你是否在 ...

  8. java成神之——文件IO

    文件I/O Path Files File类 File和Path的区别和联系 FileFilter FileOutputStream FileInputStream 利用FileOutputStrea ...

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

    Properties 加载defaults.properties文件 写Properties到xml文件 读Properties从xml文件 Lambda表达式 自定义 内置 sort方法中使用Lam ...

随机推荐

  1. Selenium with Python 008 - WebDriver 元素等待

    如今大多数Web应用程序使用Ajax技术,当浏览器在加载页面时,页面上的元素可能并不是同时被加载完成的,这给元素的定位增加了困难.如果因为在加载某个元素时延迟而造成ElementNotVisibleE ...

  2. 51nod 1406 位运算/dp

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1406 1406 与查询 题目来源: CodeForces 基准时间限制: ...

  3. Redis 数据备份与恢复,安全,性能测试,客户端连接,管道技术,分区(四)

    Redis 数据备份与恢复 Redis SAVE 命令用于创建当前数据库的备份. 语法 redis Save 命令基本语法如下: redis 127.0.0.1:6379> SAVE 实例 re ...

  4. Rope的简单介绍

    repo的一些用法和理解 repo简单来讲就是一种调用git的一个脚本文件,用来管软件项目的软件仓库配置文件,描述了软件之间的一些依赖关系. 在Google的android项目下: repo只是goo ...

  5. React Native探索(四)Flexbox布局详解

    相关文章 React Native探索系列 前言 在Android开发中我们有很多种布局,比如LinearLayout和RelativeLayout,同样在React Native也有它的布局,这个布 ...

  6. Linux 下spark安装

    一.安装前提: 1.java环境(jdk1.8) 2.scala环境(2.0) 3.python 环境(3.5)  :注如果使用pyspark的话,这个才是必须的. 二.spark安装 在官网下载安装 ...

  7. Ubuntu16.04配置apache+php+mysql

    命令行配置apache input sudo apt-get install apache2 done! 命令行配置mysql 参见: MySQL install and setting 命令行配置p ...

  8. [QT][转载] Qt信号和槽

    From: http://blog.csdn.net/rl529014/article/details/51346955 GUI 程序除了要绘制控件,还要响应系统和用户事件,例如重绘.绘制完成.点击鼠 ...

  9. Ant入门之引用外部jar文件

    笔者在java项目开发中经常遇到引用外部Jar包的情况,使用ant打包过程中需要对其引用.现在此简单记忆以飨来者. 此处引用Log4j,具体程序HelloLog4j.java: package oat ...

  10. Oracle 索引的失效和重建

    查询指定表的索引 SELECT T1.TABLE_NAME, T1.INDEX_NAME, T1.INDEX_TYPE, T1.UNIQUENESS, T1.TABLE_OWNER, T1.STATU ...