一、List

ArrayList

  • 使用List时,最好初始化容量。

    ArrayList的默认容量为10,每次扩容增0.5倍,假如要放置100个元素,需要多次扩容。
   List<String> list=new ArrayList<>(100);
  • String数组转List,使用Arrays.asList。
  String[] stryArray=new String[]{"str1","str2","str3"};
List<String> list=Arrays.asList(strArray);
  • String(以逗号隔开)转List:
public static List<String> stringToList(String strs){
if (strs==null) {
return null;
}
String[] str = strs.split(",");
return Arrays.asList(str);
}

注意,通过Arrays.asList转换的List,不可以使用add()方法。如果使用的话,会报错:java.lang.UnsupportedOperationException

可以使用以下方式在新的List中添加数据:

    String[] stryArray=new String[]{"str1","str2","str3"};
List<String> list=Arrays.asList(strArray); List<String> strList=new ArrayList<>(list);
strList.add("test");
  • List转成String数组,使用toArray()方法。
    List<String> list = new ArrayList<String>(2);
list.add("test1");
list.add("test2");
String[] array = new String[list.size()];
array = list.toArray(array);
  • List转String,用逗号隔开的,可以使用String.join(",",list)。也可以使用其他的分隔符。

    如下:
    List<String> list=new ArrayList<>();
list.add("shen");
list.add("zhen");
list.add("shi");
String words= String.join(",",list);
System.out.println(words);
  • List转int[]数组,使用java8的stream()。
        int[] arr = list.stream().mapToInt(Integer::valueOf).toArray();
  • int[]数组转List,如下:
int[] arr = {4, 5, 3, 6, 2, 5, 1};
List<Integer> list = Arrays.stream(arr).boxed().collect(Collectors.toList());
  • 判断集合个数是否为空。
    if (list!=null && list.size==0 ){
//...
}

更推荐的做法是:

使用apache的工具类CollectionUtils.isEmpty()。

    if (CollectionUtils.isNotEmpty(list)) {

    }
  • 删除list中的元素:

    想要遍历集合,删除元素,必须使用Iterator()。如果使用foreach(),可能会报错"ConcurrentModificationException"。
public void removeElement() {
//如果采用Arrays.asList(),是不能对集合进行增删操作的。
List<String> list = new ArrayList<>();
list.add("1");
list.add("2");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String item = iterator.next();
if (item==null) {
iterator.remove();
}
}
}

更方便的写法,如下:

public void removeElement() {
List<String> list = new ArrayList<>();
list.add("1");
list.add("2");
//removeIf(),内部使用的就是Iterator()。
list.removeIf(Objects::isNull);
}

LinkedList

  • 在增删比较多的场景下,使用LinkedList。

返回空的List,不要返回null。

返回null,容易导致空指针异常。

可以使用Collections.emptyList(),表示的是空集合。

示例如下:

	public List<BillFiles> queryBillFiles(BillFiles billFiles) {
//以下是一个简单的数据库查询
List<BillFiles> billFilesList=billFilesMapper.queryBillFiles(billFiles);
if(billFilesList==null) {
billFilesList= Collections.emptyList();
}
return billFilesList;
}

二、Set

HashSet

  • 去重:可以使用Set不重复的特性进行去重。

    将集合作为HashSet()构造方法的参数。
HashSet(Collection<? extends E> c)

Set的size和原来集合的size相同,说明没有重复数据。也可以用contains()判断。

示例如下:

        List<String> list=new ArrayList<>();
list.add("123");
list.add("456");
Set<String> set = new HashSet<>(list);
for (String s : set) {
System.out.println(s);
}

也可以放入map的values集合:

Map<Integer, Integer> map = new HashMap<>();
Set<Integer> set = new HashSet<>(map.values()); if( map.size() == set.size()){ }
//if(set.contains()){}

三、Map

HashMap

  • 遍历HashMap,代码如下:
        Map<Integer,String> map=new HashMap<Integer,String>();
map.put(1,"banana");
map.put(2,"apple");
//遍历entrySet()返回的Set,其中每一个元素都是Map.Entry类型的,再通过getKey()、getValue()获取键值对
//以下的Map为接口名,map为Map接口声明的变量。
for (Map.Entry<Integer, String> entry : map.entrySet()) {
System.out.println("键:"+entry.getKey() + ",值: " + entry.getValue());
}
  • map.keySet():获取所有的key

  • map.values() :获取所有的value

  • 使用map.getOrDefault(Object key, V defaultValue)。如果key不存在,返回默认值。

    比如,用key存储字符串,用value统计次数。如下:

Map<String, Integer> map = new HashMap<>();
String word="s";
int count=map.getOrDefault(word, 0);
map.put(word, count+ 1);
  • 使用compute(),对map中的k和v进行计算。
compute(K key,
BiFunction<? super K, ? super V, ? extends V> remappingFunction)

第一个参数是key,第二个参数是匿名函数式,(k,v)-> 后面就是对key和value的具体处理逻辑。

示例如下:

Map<String, Integer> map = new HashMap<>();
String word="s";
Integer count=map.compute(word,(k,v)->{
if (v==null){
return 0;
}
return v+1;
});

待补充。

java集合代码示例的更多相关文章

  1. java HTTP代码示例

    //测试环境发送用例 @Test public void testSendForTest() {     String url = "http://172.16.30.108:8138/ap ...

  2. Java多态——代码示例

    刚开始看多态的文字定义时,总是不明白说的啥意思,看了一些示例代码后,总算知道了,其实也就是“多态”的字面意思. 如下: class A{ public void Out() { System.out. ...

  3. Java多线程代码示例

    package algorithm; class Mythread extends Thread{ String name; public Mythread(String name){ this.na ...

  4. 面试半年!三面阿里,四面蚂蚁金服,居然倒在了一个Java集合之Map上?

    Map接口 Map与Collection并列存在.用于保存具有映射关系的数据:key-valueMap中的key和value都可以是任何引用类型的数据Map中的key用set来存放,不允许重复,即同一 ...

  5. Java 集合系列05之 LinkedList详细介绍(源码解析)和使用示例

    概要  前面,我们已经学习了ArrayList,并了解了fail-fast机制.这一章我们接着学习List的实现类——LinkedList.和学习ArrayList一样,接下来呢,我们先对Linked ...

  6. Java 集合系列10之 HashMap详细介绍(源码解析)和使用示例

    概要 这一章,我们对HashMap进行学习.我们先对HashMap有个整体认识,然后再学习它的源码,最后再通过实例来学会使用HashMap.内容包括:第1部分 HashMap介绍第2部分 HashMa ...

  7. Java 集合系列11之 Hashtable详细介绍(源码解析)和使用示例

    概要 前一章,我们学习了HashMap.这一章,我们对Hashtable进行学习.我们先对Hashtable有个整体认识,然后再学习它的源码,最后再通过实例来学会使用Hashtable.第1部分 Ha ...

  8. Java 集合系列 09 HashMap详细介绍(源码解析)和使用示例

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

  9. Java 集合系列 05 Vector详细介绍(源码解析)和使用示例

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

随机推荐

  1. [Tools] 多媒体视频处理工具FFmpeg

    FFMpeg FFmpeg是一套可以用来记录.转换数字音频.视频,并能将其转化为流的开源计算机程序.采用LGPL或GPL许可证.它提供了录制.转换以及流化音视频的完整解决方案.它包含了非常先进的音频/ ...

  2. 92.vue---新手从本地项目开发到服务器线上运行爬坑。

    因为我做的是后台,所以不用做SEO 参考 本项目的定位是后台集成方案,不太适合当基础模板来进行二次开发.因为本项目集成了很多你可能用不到的功能,会造成不少的代码冗余.如果你的项目不关注这方面的问题,也 ...

  3. OpenFire后台插件上传获取webshell及免密码登录linux服务器

    1.目标获取 (1)fofa.so网站使用搜索body="Openfire, 版本: " && country=JP,可以获取日本存在的Openfire服务器.如图 ...

  4. 英语bitellos钻石bitellos单词

    大颗粒的钻石叫做bitellos,四大钻石指的就是“摄政王”.“南非之星”.“蓝色希望”和“光明之山”四颗钻石.经过琢磨的钻石光彩夺目.灿烂无比,历来被誉为“宝石之王”,科研领域里大颗粒的钻石叫做bi ...

  5. C#的静态类

    静态类 静态类与非静态类的重要区别在于静态类不能实例化,也就是说,不能使用 new 关键字创建静态类类型的变量.在声明一个类时使用static关键字,具有两个方面的意义:首先,它防止程序员写代码来实例 ...

  6. Docker 0x04: Docker 基本使用

    目录 Docker 基本使用 第一步:明确要使用容器运行的应用的镜像相关 第二步:运行一个官方nginx应用 第三步:单纯下载镜像,pull 第四步:设置国内docker-hub 第五步:列出已有镜像 ...

  7. 机器学习笔记6:K-Means

    目录 目标函数 目标函数的表现函数 针对u和r求解: 最优解的表达式的意义: K-means聚类的形象化展示 聚类前 第一轮循环 第二轮循环 第三轮循环 最终结果 演示代码: 关于K-means的几个 ...

  8. mysql 外键的基本使用

    外键的使用条件: 两个表必须是InnoDB表,MyISAM表暂时不支持外键外键列必须建立了索引,MySQL 4.1.2以后的版本在建立外键时会自动创建索引,但如果在较早的版本则需要显式建立:外键关系的 ...

  9. zookeeper,及k8s基础概念

    1.描述zookeeper集群中leader,follower,observer几种角色 Zookeeper: 分布式系统:是一个硬件或软件组件分布在网络中的不同的计算机之上,彼此间仅通过消息传递进行 ...

  10. Linux运维技术之详解任务计划(crontab命令)

    crontab命令 按照预先设置的时间周期(分钟.小时.天……)重复执行用户指定的命令操作,属于周期性计划任务 (1).先来看一下/etc/crontab文件的内容: [root@localhost ...