Java的三大集合即:Set、List、Map

  • Set:代表无序、不可重复的集合,常用的有HashSet(哈希表实现)、TreeSet(红黑树实现);
  • List:代表有序、可以重复的集合,比较常用的有ArrayList(数组实现)、LinkedList(链表实现);
  • Map:代表具有映射关系的集合,常用的有HashMap(哈希表实现)、TreeMap(红黑树实现);

Java5以后又增加了Queue体系集合,代表一种队列集合实现,这里先不介绍。

List的实现类原理比较简单,Map比较复杂,而Set其实是基于Map的一种实现。

下面从各个集合的基本操作介绍一下,分别选取HashSet、ArrayList、HashMap三个典型的实现类:

1. HashSet

/**
* HashSet的增删遍历
* @author wangjun
* @email scuwangjun@hotmail.com
* @time 2018年4月6日 下午2:40:33
*/
public class HashSetOperation { public static void main(String[] args) {
//初始化
HashSet<String> set = new HashSet<>();
//增
set.add("key1");
set.add("key2");
set.add("key3");
//删
set.remove("key1");
//遍历1
//使用set.descendingIterator()方法可以反向遍历
System.out.println("HashSet遍历1,使用Iterator:");
Iterator<String> it = set.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
//遍历2
System.out.println("HashSet遍历2,使用for:");
for(String str: set) {
System.out.println(str);
}
}

运行结果:

HashSet遍历1,使用Iterator:
key2
key3
HashSet遍历2,使用for:
key2
key3

2.ArrayList

/**
* ArrayList的增删查改,遍历
* @author wangjun
* @email scuwangjun@hotmail.com
* @time 2018年4月6日 下午2:25:43
*/
public class ArrayListOperation { public static void main(String[] args) {
//初始化
List<String> list = new ArrayList<>();
//增
list.add("str1");
list.add("str2");
list.add("str3");
//删
list.remove(1);
//查
System.out.println("list的第二个元素是:" + list.get(1));
//改
list.set(0, "str11");
System.out.println("最终的list:" + list.toString());
//遍历1,使用for
System.out.println("LinkedList遍历1,使用for:");
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
//遍历2,使用增强for
System.out.println("LinkedList遍历1,使用增强for:");
for(String str: list) {
System.out.println(str);
}
//遍历3,使用Iterator,集合类的通用遍历方式
System.out.println("LinkedList遍历3,使用Iterator:");
Iterator<String> it = list.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
} }

运行结果:

list的第二个元素是:str3
最终的list:[str11, str3]
LinkedList遍历1,使用for:
str11
str3
LinkedList遍历1,使用增强for:
str11
str3
LinkedList遍历3,使用Iterator:
str11
str3

3.HashMap

/**
* hashMap的增删查改
* 无序
* key相当于set,不可重复
* value相当于list,可重复
* @author wangjun
* @email scuwangjun@hotmail.com
* @time 2018年4月6日 下午2:30:31
*/
public class HashMapOperation { public static void main(String[] args) {
//初始化
HashMap<String,String> map = new HashMap<>();
//增
map.put("key1", "value1");
map.put("key2", "value2");
map.put("key3", "value3");
//删
map.remove("key2");
//查
System.out.println("key1对应的valve为:" + map.get("key1"));
//改
map.replace("key3", "value33");
System.out.println("最终的map是:" + map.toString());
//遍历1,取出map中所有的key组成一个set
System.out.println("HashMap遍历1,取出map中所有的key组成一个set:");
for(String key: map.keySet()) {
System.out.println("key:" + key + ",value:" + map.get(key));
}
//遍历2,取出key组成set后,通过Iterator遍历key
System.out.println("HashMap遍历2,取出key组成set后,通过Iterator遍历key:");
Iterator<String> it = map.keySet().iterator();
while(it.hasNext()) {
String key = it.next();
String value = map.get(key);
System.out.println("key:" + key + ",value:" + value);
}
//遍历3,取出map中实际存储的数据结构--Map.Entry,在HashMap中使用的是Node静态内部类
//推荐这种,尤其是数据很大时
System.out.println("HashMap遍历3,通过Map.Entry:");
Set<Map.Entry<String, String>> entry = map.entrySet();
for(Map.Entry<String, String> entryItem: entry) {
String key = entryItem.getKey();
String value = entryItem.getValue();
System.out.println("key:" + key + ",value:" + value);
}
//遍历4,只能遍历value,不能遍历key,相当于取出map中左右的value组成一个list
System.out.println("HashMap遍历4,只遍历value:");
for(String value: map.values()) {
System.out.println("value:" + value);
}
} }

运行结果:

key1对应的valve为:value1
最终的map是:{key1=value1, key3=value33}
HashMap遍历1,取出map中所有的key组成一个set:
key:key1,value:value1
key:key3,value:value33
HashMap遍历2,取出key组成set后,通过Iterator遍历key:
key:key1,value:value1
key:key3,value:value33
HashMap遍历3,通过Map.Entry:
key:key1,value:value1
key:key3,value:value33
HashMap遍历4,只遍历value:
value:value1
value:value33

可以看到:

遍历Set一般常用2种方式;

遍历List一般常用3种方式;

遍历Map一般常用4种方式;

根据使用场景,选择合适的遍历方式。

List&Map&Set的操作和遍历的更多相关文章

  1. 003-Tuple、Array、Map与文件操作入门实战

    003-Tuple.Array.Map与文件操作入门实战 Tuple 各个元素可以类型不同 注意索引的方式 下标从1开始 灵活 Array 注意for循环的until用法 数组的索引方式 上面的for ...

  2. Guava中这些Map的骚操作,让我的代码量减少了50%

    原创:微信公众号 码农参上,欢迎分享,转载请保留出处. Guava是google公司开发的一款Java类库扩展工具包,内含了丰富的API,涵盖了集合.缓存.并发.I/O等多个方面.使用这些API一方面 ...

  3. vector 与map的下标操作

    1.vector的下标操作不会添加元素,只能针对已经存在的元素操作. 2.map的下标操作具有副作用,key不存在,会在map中添加一个具有该key的新元素,新元素的value使用默认构造方法. 3. ...

  4. java中集合的增删改操作及遍历总结

      集合的增删改操作及遍历总结

  5. Java map 详解 - 用法、遍历、排序、常用API等

    尊重原创: http://www.cnblogs.com/lzq198754/p/5780165.html 概要: java.util 中的集合类包含 Java 中某些最常用的类.最常用的集合类是 L ...

  6. Map的常用操作

    public static void main(String[] args) { Map<String, String> map = new HashMap<>(); map. ...

  7. Map集合的几种遍历方式

    Map<String ,String> map=new HashMap<String,String>(); map.put("1","value1 ...

  8. golang在多个go routine中进行map或者slice操作应该注意的对象。

    因为golang的map和列表切片都是引用类型,且非线程安全的,所以在多个go routine中进行读写操作的时候,会产生“map read and map write“的panic错误. 某一些类型 ...

  9. pandas-05 map和replace操作

    # pandas-05 map和replace操作 map可以做一个映射,对于操作大型的dataframe来说就非常方便了,而且也不容易出错.replace的作用是替换,这个很好理解. import ...

随机推荐

  1. spring集成RabbitMQ配置文件详解(生产者和消费者)

    1,首先引入配置文件org.springframework.amqp,如下: <dependency> <groupId>org.springframework.amqp< ...

  2. Linux给tomcat指定jdk

    在安装jenkins的时候,发现必须是jdk1.8,所以就只能单独安装一个tomcat,在给tomcat配置jdk1.8了,以免破坏以前的项目 安装就不多说了.这里需要修改两个配置文件: 安装的tom ...

  3. git的版本回退探索

    简介 今天改完代码匆忙提交,上线发现有问题,那怎么办?废话,赶紧回滚,那怎么回滚,开始用git reset [--soft | --mixed | --hard 命令,但这命令真的能达到我预期的效果吗 ...

  4. Java Web项目中使用Freemarker生成Word文档

    Web项目中生成Word文档的操作屡见不鲜.基于Java的解决方式也是非常多的,包含使用Jacob.Apache POI.Java2Word.iText等各种方式,事实上在从Office 2003開始 ...

  5. 快速排序,一个爱情故事-java版

    public static void myquicksort(int[] ages,int girl,int boy){ //这是一个站在数组两端,追求完美爱情的故事 //年龄不匹配的不要 //第0步 ...

  6. 【Unity】使用JSONObject解析Json

    为何要用JSONObject 之前已经用过JsonUtility和Newton.Json来解析Json了,为什么现在又要用一个新的JSONObject来解析Json? 使用JsonUtility:ht ...

  7. at91 看门狗

    看 门狗的驱动一般来说比较简单,只要做寄存器的设置实现开启.关闭.喂狗功能.本项目中我们使用的是at91sam9g45处理器,带有看门狗定时器.这个 看门狗的驱动却比较复杂,应用层想用它的话,将涉及到 ...

  8. IIS 日志分析

    查看哪个IP访问量大,访问了什么地址,大可以看到攻击者IP: select c-ip,count(c-ip) AS allcount,cs-uri-stem,cs-uri-query,cs(User- ...

  9. flume1.8实现hdfsSink整点滚动文件

    由于官方的1.8版本hdfs-sink不能在每天的0点滚动文件,所以修改了flume-hdfs-sink源码. flume-hdfs-sink中修改了HDFSEventSink.java文件,其他文件 ...

  10. 强大的vim配置文件,让编程更随意

    花了很长时间整理的,感觉用起来很方便,共享一下. 我的vim配置主要有以下优点: 1.按F5可以直接编译并执行C.C++.java代码以及执行shell脚本,按“F8”可进行C.C++代码的调试 2. ...