set,map,list 都是用于储存数据的集合那么他们之间有什么区别特点呢?先看下图:
Set集合
1.特点
无序不可重复的集合
2.常用排序方法
treeSet:在集中以升序对对象排序的集的实现,这意味着从一个TreeSet对象获得第一个迭代器将按照升序来提供对象,TreeSet类使用了一个TreeMap
下面来看一个例子,
package cn.cx.entity;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;
public class StuTest {
public static void main(String[] args) {
Set<String> set = new HashSet<String>();
set.add("xet");
set.add("jpo");
set.add("wo");
set.add("jpo");
System.out.println(set);
Set<String> softset = new TreeSet<String>(set);
System.out.println(softset);
}
}
运行结果可以看到上面的运行结果是无序,不重复的;下面的运行结果是按照字母排行顺序排列的也灭有重复。也就是说TreeSet可以把set集合中的数据按照一定的顺序排列。
4.便利方法
迭代器便利
package cn.cx.entity;
import java.util.*;
public class StuTest {
@org.junit.Test
public void testdemo2(){
Set<String> set=new HashSet<>();
set.add("aa");
set.add("bb");
set.add("bb");
set.add("dd");
//迭代器
Iterator<String> iterator = set.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
}
增强for循环
package cn.cx.entity;
import java.util.*;
public class StuTest {
@org.junit.Test
public void testdemo2(){
Set<String> set=new HashSet<>();
set.add("aa");
set.add("bb");
set.add("bb");
set.add("dd");
//for循环便利
for (String str:set) {
System.out.println(str);
}
System.out.println("..........................");
}
List集合
1.特点
有序可重复的存储数据的集合
2.常用List
List集合一般有ArrayList,LinkedList两种。 ArrayList底部由数组构成,不难看出查询速度比较快,插入数据的速度相对较慢;LinkedList底部由循环双向链组成,查询速度较慢,但插入数据速度快。
3.List常用算法举例
package cn.cx.entity;
import java.util.*;
public class StuTest {
@org.junit.Test
public void testdemo(){
List p1 = new LinkedList();
for(int i = 0; i<=9;i++){
p1.add("a"+i);
}
//打印p1[a0, a1, a2, a3, a4, a5, a6, a7, a8, a9]
System.out.println(p1);
// 随机排列
Collections.shuffle(p1);
System.out.println(p1);
// 逆序
Collections.reverse(p1);
System.out.println(p1);
// 排序
Collections.sort(p1);
System.out.println(p1);
// 折半查找
System.out.println(Collections.binarySearch(p1, "a5"));
}
}
运行结果
4.List便利方法
在删除List集合中的数据时因该使用迭代器的遍历方法删除,其余两种方法会报异常.
package cn.cx.entity;
import java.util.*;
public class StuTest {
@org.junit.Test
public void testdemo3(){
List<String> list=new ArrayList<>();
list.add("aa");
list.add("bb");
list.add("bb");
list.add("cc");
//for循环遍历
for (int i = 0; i <list.size() ; i++) {
System.out.println(list.get(i));
}
//增强for循环便利
System.out.println("------------");
for (String str:list) {
System.out.println(str);
}
System.out.println("------------");
//迭代器
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()){
String next = iterator.next();
if (next.equals("bb")){
iterator.remove();
}
}
}
}
运行结果
Map集合
1.特点
存储方式以键值对的方式储存,键不可以重复,值可以重复
2.常用Map子类
HashMap和Hashtable
HashMap: 实现一个映象,允许存储空对象,而且允许键是空(由于键必须是唯一的,当然只能有一个)。
3.常用方法
entrySet();是便利map集合时常用的方法。
4.便利方式
@org.junit.Test
public void testdemo3(){
Map<String,String> map = new HashMap<>();
map.put("aa","123");
map.put("bb","456");
map.put("cc","789");
map.put("aa","000");
/*Set<String> strings = map.keySet();
for(String str:strings){
//System.out.println(str);
System.out.println("key="+str+"--->"+"value="+map.get(str));
}*/
//使用entryset
Set<Map.Entry<String, String>> entries = map.entrySet();
Iterator<Map.Entry<String, String>> iterator = entries.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
}
在使用迭代器便利时,得到的数据只能是
总结
1.list 是一个有序可重复的储存数组的集合。
2.set是一个无序不可重复的储存数组的集合。
3.map是一个以键值对的方式储存的方式,键不可以重复,值可以重复 。