导航:首页 > 编程语言 > javasetlist转换

javasetlist转换

发布时间:2022-08-17 23:12:33

java中将一个类转成list。list的每个属性都是String类型的

就循环List,取出每个对象,再每次循环新申明一个list,把取到的对象属性值放入新list,把这个新list替换外层循环list的相应位置就可以了,如果类的类型不定,还需要用到反射机制

⑵ JAVA里面set,map,list的区别是什么(尽量详细)

一、List接口
List是一个继承于Collection的接口,即List是集合中的一种。List是有序的队列,List中的每一个元素都有一个索引;第一个元素的索引值是0,往后的元素的索引值依次+1。和Set不同,List中允许有重复的元素。实现List接口的集合主要有:ArrayList、LinkedList、Vector、Stack。

ArrayList
ArrayList是一个动态数组,也是我们最常用的集合。它允许任何符合规则的元素插入甚至包括null。每一个ArrayList都有一个初始容量:

private static final int DEFAULT_CAPACITY = 10;

随着容器中的元素不断增加,容器的大小也会随着增加。在每次向容器中增加元素的同时都会进行容量检查,当快溢出时,就会进行扩容操作。所以如果我们明确所插入元素的多少,最好指定一个初始容量值,避免过多的进行扩容操作而浪费时间、效率。

size、isEmpty、get、set、iterator 和 listIterator 操作都以固定时间运行。add 操作以分摊的固定时间运行,也就是说,添加 n 个元素需要 O(n) 时间(由于要考虑到扩容,所以这不只是添加元素会带来分摊固定时间开销那样简单)。

ArrayList擅长于随机访问。同时ArrayList是异步的。

LinkedList
同样实现List接口的LinkedList与ArrayList不同,ArrayList是一个动态数组,而LinkedList是一个双向链表。所以它除了有ArrayList的基本操作方法外还额外提供了get,remove,insert方法在LinkedList的首部或尾部。

由于实现的方式不同,LinkedList不能随机访问,它所有的操作都是要按照双重链表的需要执行。在列表中索引的操作将从开头或结尾遍历列表(从靠近指定索引的一端,节约一半时间)。这样做的好处就是可以通过较低的代价在List中进行插入和删除操作。

与ArrayList一样,LinkedList也是异步的。如果多个线程同时访问一个List,则必须自己实现访问同步。一种解决方法是在创建List时构造一个同步的List:

List list = Collections.synchronizedList(new LinkedList(…));

Vector
与ArrayList相似,但是Vector是同步的。所以说Vector是线程安全的动态数组。它的操作与ArrayList几乎一样。

Stack
Stack继承自Vector,实现一个后进先出的堆栈。Stack提供5个额外的方法使得Vector得以被当作堆栈使用。基本的push和pop方法,还有peek方法得到栈顶的元素,empty方法测试堆栈是否为空,search方法检测一个元素在堆栈中的位置。Stack刚创建后是空栈。

二、Set接口
Set是一个继承于Collection的接口,Set是一种不包括重复元素的Collection。它维持它自己的内部排序,所以随机访问没有任何意义。与List一样,它同样运行null的存在但是仅有一个。由于Set接口的特殊性,所有传入Set集合中的元素都必须不同,关于API方面。Set的API和Collection完全一样。实现了Set接口的集合有:HashSet、TreeSet、LinkedHashSet、EnumSet。

HashSet
HashSet堪称查询速度最快的集合,因为其内部是以HashCode来实现的。集合元素可以是null,但只能放入一个null。它内部元素的顺序是由哈希码来决定的,所以它不保证set的迭代顺序;特别是它不保证该顺序恒久不变。

TreeSet
TreeSet是二叉树实现的,基于TreeMap,生成一个总是处于排序状态的set,内部以TreeMap来实现,不允许放入null值。它是使用元素的自然顺序对元素进行排序,或者根据创建Set时提供的 Comparator 进行排序,具体取决于使用的构造方法。

LinkedHashSet
LinkedHashSet集合同样是根据元素的hashCode值来决定元素的存储位置,但是它同时使用链表维护元素的次序。这样使得元素看起 来像是以插入顺序保存的,也就是说,当遍历该集合时候,LinkedHashSet将会以元素的添加顺序访问集合的元素。LinkedHashSet在迭代访问Set中的全部元素时,性能比HashSet好,但是插入时性能稍微逊色于HashSet。

三、Map接口
Map与List、Set接口不同,它是由一系列键值对组成的集合,提供了key到Value的映射。在Map中它保证了key与value之间的一一对应关系。也就是说一个key对应一个value,所以它不能存在相同的key值,当然value值可以相同。实现map的集合有:HashMap、HashTable、TreeMap、WeakHashMap。

HashMap
以哈希表数据结构实现,查找对象时通过哈希函数计算其位置,它是为快速查询而设计的,其内部定义了一个hash表数组(Entry[] table),元素会通过哈希转换函数将元素的哈希地址转换成数组中存放的索引,如果有冲突,则使用散列链表的形式将所有相同哈希地址的元素串起来,可能通过查看HashMap.Entry的源码它是一个单链表结构。

HashTable
也是以哈希表数据结构实现的,解决冲突时与HashMap也一样也是采用了散列链表的形式。HashTable继承Dictionary类,实现Map接口。其中Dictionary类是任何可将键映射到相应值的类(如 Hashtable)的抽象父类。每个键和每个值都是一个对象。在任何一个 Dictionary 对象中,每个键至多与一个值相关联。Map是”key-value键值对”接口。 HashTable采用”拉链法”实现哈希表不过性能比HashMap要低。

TreeMap
有序散列表,实现SortedMap接口,底层通过红黑树实现。

WeakHashMap
谈WeakHashMap前先看一下Java中的引用(强度依次递减)

强引用:普遍对象声明的引用,存在便不会GC
软引用:有用但并非必须,发生内存溢出前,二次回收
弱引用:只能生存到下次GC之前,无论是否内存足够
虚引用:唯一目的是在这个对象被GC时能收到一个系统通知
以弱键实现的基于哈希表的Map。在 WeakHashMap 中,当某个键不再正常使用时,将自动移除其条目。更精确地说,对于一个给定的键,其映射的存在并不阻止垃圾回收器对该键的丢弃,这就使该键成为可终止的,被终止,然后被回收。丢弃某个键时,其条目从映射中有效地移除,因此,该类的行为与其他的 Map 实现有所不同。null值和null键都被支持。该类具有与HashMap类相似的性能特征,并具有相同的效能参数初始容量和加载因子。像大多数集合类一样,该类是不同步的。

四、总结
1、List、Set都是继承自Collection接口,Map则不是。

2、List特点:元素有放入顺序,元素可重复 ,Set特点:元素无放入顺序,元素不可重复,重复元素会覆盖掉,(注意:元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的,加入Set 的Object必须定义equals()方法 ,另外list支持for循环,也就是通过下标来遍历,也可以用迭代器,但是set只能用迭代,因为他无序,无法用下标来取得想要的值。)

3、Set和List对比:
Set:检索元素效率低下,删除和插入效率高,插入和删除不会引起元素位置改变。
List:和数组类似,List可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改变。

4、Map适合储存键值对的数据

5、线程安全集合类与非线程安全集合类 :

LinkedList、ArrayList、HashSet是非线程安全的,Vector是线程安全的;
HashMap是非线程安全的,HashTable是线程安全的;
StringBuilder是非线程安全的,StringBuffer是线程安全的。

⑶ map,set,list和数组之间的转换怎么转换求高手指点下

★ 数组转Collection使用Apache Jakarta Commons Collections:import org.apache.commons.collections.CollectionUtils; String[] strArray = {"aaa", "bbb", "ccc"}; List strList = new ArrayList(); Set strSet = new HashSet(); CollectionUtils.addAll(strList, strArray); CollectionUtils.addAll(strSet, strArray); CollectionUtils.addAll()方法的实现很简单,只是循环使用了Collection的add()方法而已。如果只是想将数组转换成List,可以用JDK中的java.util.Arrays类:import java.util.Arrays; String[] strArray = {"aaa", "bbb", "ccc"}; List strList = Arrays.asList(strArray); 不过Arrays.asList()方法返回的List不能add对象,因为该方法的实现是使用参数引用的数组的大小来new的一个ArrayList。★ Collection转数组直接使用Collection的toArray()方法,该方法有两个重载版本:Object[] toArray(); T[] toArray(T[] a); ★ Map转Collection直接使用Map的values()方法。★ List和Set转换List list = new ArrayList(new Hashset());// Fixed-size list
List list = Arrays.asList(array);// Growable
list list = new LinkedList(Arrays.asList(array));// Duplicate elements are discarded
Set set = new HashSet(Arrays.asList(array));

⑷ java list转set之后丢值

set值是唯一的,会被覆盖,list可以相同。这样转,很容易出问题的。

⑸ java中set怎么转换成list

Map<String,String>map=newHashMap<String,String>();
map.put("ele1","小樱");
map.put("ele2","若曦");
map.put("ele3","晴川");
Set<String>set=map.keySet();

//Set转List,方法一:ArrayList(Collection<?>c)
List<String>list1=newArrayList<String>(set);
for(inti=0;i<list1.size();i++){
System.out.println("list1("+i+")-->"+list1.get(i));
}

//Set转List,方法二:List实现类(ArrayList/LinkedList)的方法--addAll(Collection<?>c)
List<String>list2=newArrayList<String>();
list2.addAll(set);
for(Stringelem:list2){
System.out.println(elem);
}

⑹ Java中Set 和List两个集合怎样互相转化

import java.util.HashSet;import java.util.Set;
public class tes {
public static void main(String[] args) {
//set集合,元素是不重复的。通过equal判断是否相等
//如果是自定义的对象,需要重写equal和hashcode方法
Set set = new HashSet();
set.add("sina");
set.add("");
set.add("");
System.out.println(set.toString());
set.remove("");
System.out.println(set.toString());

}
}

======
结果:
[, sina]
[sina]

⑺ 如何利用Java代码实现List集合转换成Set集合

Set和List都是接口,都实现了Collection接口和Iterable接口。
两者的转换不常进行,通过集合的 addAll() 方法可以实现

/**
*List和Set的转化(Set转化成List)
*/
publicstatic<T>List<T>SetToList(Set<T>set){
List<T>list=newArrayList<>();
list.addAll(set);//转换核心
returnlist;
}

⑻ Set集合转化List集合

Set 有键和值 一个list只能取键或值。

import java.util.ArrayList;

import java.util.HashSet;

public class Test {

public static void main(String[] args) {

Set<String> set = new HashSet<String>(); //生成Set

set.add("apple"); //set添加数据

List<String> list = new ArrayList<String>();//生成List

Iterator<String> it = set.iterator(); //遍历Set

while(it.hasNext()){

list.add(it.next().toString()); //Set转化List

}

Iterator<String> it2 = list.iterator(); //遍历List

while(it2.hasNext()){

System.out.println(it2.next()); //输出List

}

(8)javasetlist转换扩展阅读:

在列表中,数据项的顺序是确定的,也可以存在多个相同的数据项。列表支持的操作包括查找项目并找到其位置(若存在),将项目从列表中删除,在特定位置插入项目等。通常的队列,或称FIFO即是一个列表,该列表只能在一端添加项目,而在另一端删除项目。

而栈,或LIFO则只能在同一端添加或删除项目。不管是队列还是栈,集合中项目的顺序都应当是一定的,因此这两种情况只是列表的特例。其它列表支持的操作包括排序,再一次说明了其中顺序的重要性。

阅读全文

与javasetlist转换相关的资料

热点内容
随车拍app绑定什么设备 浏览:895
方维团购系统源码 浏览:990
linux反弹shell 浏览:154
打印机接口加密狗还能用吗 浏览:299
二板股票源码 浏览:446
度人经pdf 浏览:902
怎么配置android远程服务器地址 浏览:960
java程序员看哪些书 浏览:943
什么app可以免费和外国人聊天 浏览:797
pdf手写笔 浏览:182
别永远伤在童年pdf 浏览:990
爱上北斗星男友在哪个app上看 浏览:421
主力散户派发源码 浏览:671
linux如何修复服务器时间 浏览:61
荣县优途网约车app叫什么 浏览:479
百姓网app截图是什么意思 浏览:229
php如何嵌入html 浏览:817
解压专家怎么传输 浏览:745
如何共享服务器的网络连接 浏览:136
程序员简易表白代码 浏览:170