字符串(被逗号分隔)与List互转 和 常用集合使用小技巧归纳

您所在的位置:网站首页 元组转化为集合 字符串(被逗号分隔)与List互转 和 常用集合使用小技巧归纳

字符串(被逗号分隔)与List互转 和 常用集合使用小技巧归纳

2023-09-26 09:37| 来源: 网络整理| 查看: 265

前言

此篇主要是记录 开发中用到的一下字符串处理的小技巧,处理字符串的方式很多, 但就是觉得能不多写代码就不多写,尽量用一些工具类来解决.尽量把代码写的优雅一写.

1 以逗号分隔的字符串 转成list // 将逗号分隔的字符串转换为List String str = "小花,小明,小米"; // 1.逗号分隔的字符串-->数组-->list List result = Arrays.asList(str.split(",")); // 2.使用Apache Commons的StringUtils List result1 = Arrays.asList(StringUtils.split(str, ",")); // 3.通过遍历 对于遍历这样写代码行数优点多 也不优雅 建议上边的 2种方式 String[] strings = str.split(","); List result2 = new ArrayList(); for (String string : strings) { result2.add(string); } 2 将list转换为逗号分隔的字符串 // 将List转换为逗号分隔的字符串 List list = new ArrayList(); list.add("小花"); list.add("小明"); list.add("小米"); // 1.使用Apache Commons的StringUtils String str1 = StringUtils.join(list.toArray(), ","); // 2.通过遍历 StringBuffer str2 = new StringBuffer(); for (Iterator iterator = list.iterator(); iterator.hasNext();){ String string = (String) iterator.next(); str2.append(string); if(iterator.hasNext()){ str2.append(","); } } 3 String、StringBuffer、StringBuilder 3个的区别

在java中 这个3个用来定义常量 或者处理文本 处理字符串,作用的场景为

String:适用于少量的字符串操作的情况。 StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况。 StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况。 在运行方面速度快慢为:StringBuilder > StringBuffer > String

StringBuffer 是线程安全的,StringBuilder 是线程不安全的.

这里说下String 为什么最慢? String 为字符串常量,而StringBuilder和StringBuffer均为字符串变量, 即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量, 是可以更改的。

4 java 经常使用集合的特点总结

1:集合: (1) Collection(单列集合) List(有序,可重复) ArrayList 底层数据结构是数组,查询快,增删慢 线程不安全,效率高 Vector 底层数据结构是数组,查询快,增删慢 线程安全,效率低 LinkedList 底层数据结构是链表,查询慢,增删快 线程不安全,效率高 Set(无序,唯一) HashSet 底层数据结构是哈希表。 哈希表依赖两个方法:hashCode()和equals()

(一般规则:对象equals 是true的话,hashCode需要相同,但是hashCode相同的对象不一定equals,这就是所谓的冲突现象,但是有不同的冲突解决方法。你的hashCode()设计的好的话冲突也就小了。比如楼上给出的超出int范围之后这种hashCode()实现,对象肯定是无数的,但是hash实现是有限的呢,所以冲突了。) 执行顺序: 首先判断hashCode()值是否相同 是:继续执行equals(),看其返回值 是true:说明元素重复,不添加 是false:就直接添加到集合 否:就直接添加到集合 最终: 自动生成hashCode()和equals()即可

LinkedHashSet 底层数据结构由链表和哈希表组成。 由链表保证元素有序。 由哈希表保证元素唯一。 TreeSet 底层数据结构是红黑树。(是一种自平衡的二叉树) 如何保证元素唯一性呢? 根据比较的返回值是否是0来决定 如何保证元素的排序呢? 两种方式 自然排序(元素具备比较性) 让元素所属的类实现Comparable接口 比较器排序(集合具备比较性) 让集合接收一个Comparator的实现类对象 (2)Map(双列集合) A:Map集合的数据结构仅仅针对键有效,与值无关。 B:存储的是键值对形式的元素,键唯一,值可重复。 HashMap 底层数据结构是哈希表。线程不安全,效率高 哈希表依赖两个方法:hashCode()和equals() 执行顺序: 首先判断hashCode()值是否相同 是:继续执行equals(),看其返回值 是true:说明元素重复,不添加 是false:就直接添加到集合 否:就直接添加到集合 最终: 自动生成hashCode()和equals()即可 LinkedHashMap 底层数据结构由链表和哈希表组成。 由链表保证元素有序。 由哈希表保证元素唯一。 Hashtable 底层数据结构是哈希表。线程安全,效率低 哈希表依赖两个方法:hashCode()和equals() 执行顺序: 首先判断hashCode()值是否相同 是:继续执行equals(),看其返回值 是true:说明元素重复,不添加 是false:就直接添加到集合 否:就直接添加到集合 最终: 自动生成hashCode()和equals()即可 TreeMap 底层数据结构是红黑树。(是一种自平衡的二叉树) 如何保证元素唯一性呢? 根据比较的返回值是否是0来决定 如何保证元素的排序呢? 两种方式 自然排序(元素具备比较性) 让元素所属的类实现Comparable接口 比较器排序(集合具备比较性) 让集合接收一个Comparator的实现类对象

2:到底使用那种集合: 看需求。

是否是键值对象形式: 是:Map 键是否需要排序: 是:TreeMap 否:HashMap 否:Collection 元素是否唯一: 是:Set 元素是否需要排序: 是:TreeSet 否:HashSet 否:List 要安全吗: 是:Vector 否:ArrayList或者LinkedList 增删多:LinkedList 查询多:ArrayList

3:集合的常见方法及遍历方式 Collection: add() remove() contains() iterator() size()

遍历方式: 增强for 迭代器 |--List get() 遍历: 普通for |--Set Map: put() remove() containskey(),containsValue() keySet() get() value() entrySet() size() 遍历方式: 根据键找值 根据键值对对象分别找键和值。 5 集合 List Map 使用小技巧 归纳 想创建线程安全的集合 方式一 使用 synchronized 即可 // 创建线程安全的List List list = Collections.synchronizedList(new ArrayList()); // 创建线程安全的Map Map map = Collections.synchronizedMap(new HashMap());

2 多个list合并成一个集合

```c 有两个list 把他们合并为一个list,前提 泛型内容一致, 第三个新建的list 用 addAll() 方法即可. list allUser= new ArrayList(); list user1= new ArrayList(); list user2= new ArrayList(); allUser.addALL(user1); allUser.addALL(user2);

3 .可以利用 Set 元素唯一的特性,可以快速对一个集合进行去重操作, 避免使用 List 的contains 方法进行遍历、对比、去重操作。

4 . List 和 set 的相互转化

//List转化成Set List list = new ArrayList(); list.add("小明"); list.add("小花"); Set set = new HashSet(); set.addAll(tableList); //Set转化成List Set set = new HashSet(); set.add("小明"); set.add("小花"); List list = new ArrayList(set);


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3