Java集合list,map,set区别及遍历
1.1 List、Set、Map基本区别
1、List,Set都是继承Collection接口,Map不是。 2、List:LinkedList、ArrayList、Vector Set :HashSet、LinkedHashSet、TreeSet Map:HashMap、HashTable、TreeMap 3、List元素是有序放入,可重复。(支持for循环,迭代器遍历) Set元素无序放入且唯一,不可重复,若重复元素则会覆盖。(不支持for循环,支持迭代。原因:元素无序,由改元素的HashCode决定,相对固定) 4、List:动态增长,查询效率高,增删效率低(原因:因为有序,所以增加和删除元素会导致其他元素位置改变) Set:查询效率低,增删效率高(原因:因为无序,所以增加和删除元素不会导致其他元素位置改变) 5:、线程安全:Vector、HashTable 线程不安全:LinkedList、ArrayList、HashSet、HashMap、TreeMap
1.2 List
List的特征是其元素以线性方式存储,集合中可以存放重复对象。
- ArrayList() : 代表长度可以改变得数组。可以对元素进行随机的访问,向ArrayList()中插入与删除元素的速度慢。
- LinkedList(): 在实现中采用链表数据结构。插入和删除速度快,访问速度慢。
1、添加元素
List<String> list=new ArrayList<String>();
list.add("一个元素");
2、删除元素
for (int i = 0; i < list.size(); i++)
{
User result = list.get(i);
if (result.getId() == 3)
{
list.remove(result);
System.err.println("id: " + result.getId() + "\tname: " + result.getName());
}
}
3、最基本的两种检索集合中的所有对象的方法:
1、for循环
for(int i=0; i<list.size();i++){
System.out.println(list.get(i));
}
//也可以
for(String str : list){
System.out.println(str);
}
2、迭代器(Iterator)
Iterator it=list.iterator();
while(it.hashNext()){
System.out.println(it.next());
}
1.3 Map
Map是一种把键对象和值对象映射的集合,它的每一个元素都包含一对键对象和值对象。
Map没有继承于Collection接口,从Map集合中检索元素时,只要给出键对象,就会返回对应的值对象。
1、增删元素操作
Map<String, String> map = new HashMap<String, String>();
map.put("1", "a"); //添加key为1,值为a的元素
map.remove("1"); //删除key为1的所有元素
2、循环遍历
//第一种:通过Map.keySet遍历key和value,普遍使用,二次取值
for (String key : map.keySet()) {
System.out.println("key= "+ key + " and value= " + map.get(key));
} //第二种:通过Map.entrySet使用iterator遍历key和value:
Iterator<Map.Entry<String, String>> it = map.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<String, String> entry = it.next();
System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
} //第三种:通过Map.entrySet遍历key和value,推荐,尤其是容量大时
for (Map.Entry<String, String> entry : map.entrySet()) {
System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
}
//第四种:通过Map.values()遍历所有的value,但不能遍历key
for (String v : map.values()) {
System.out.println("value= " + v);
}
1.4 Set
Set是最简单的一种集合。集合中的对象不按特定的方式排序,并且没有重复对象。 Set接口主要实现了两个实现类:
- HashSet: HashSet类按照哈希算法来存取集合中的对象,存取速度比较快。存入HashSet的对象必须定义hashCode()
- TreeSet :TreeSet类实现了SortedSet接口,能够对集合中的对象进行排序。保存次序的Set, 底层为树结构。使用它可以从Set中提取有序的序列。
- LinkedHashSet:具有HashSet的查询速度,且内部使用链表维护元素的顺序(插入的次序)。于是在使用迭代器遍历Set时,结果会按元素插入的次序显示。
Set set=new HashSet();
String s1=new String("hello");
String s2=s1;
String s3=new String("world");
set.add(s1);
set.add(s2);
set.add(s3);
System.out.println(set.size()); //打印集合中对象的数目 为 2。
Set 的 add()方法是如何判断对象是否已经存放在集合中?
boolean isExists=false;
Iterator iterator=set.iterator();
while(it.hasNext()) {
String oldStr=it.next();
if(newStr.equals(oldStr)){
isExists=true;
}
}
Set的功能方法
Set具有与Collection完全一样的接口,因此没有任何额外的功能,不像前面有两个不同的List。实际上Set就是Collection,只 是行为不同。(这是继承与多态思想的典型应用:表现不同的行为。)Set不保存重复的元素(至于如何判断元素相同则较为负责)
Set : 存入Set的每个元素都必须是唯一的,因为Set不保存重复元素。加入Set的元素必须定义equals()方法以确保对象的唯一性。Set与Collection有完全一样的接口。Set接口不保证维护元素的次序。
Java集合list,map,set区别及遍历的更多相关文章
- Java集合和数组的区别
参考:Java集合和数组的区别 集合和容器都是Java中的容器. 区别 数组特点:大小固定,只能存储相同数据类型的数据 集合特点:大小可动态扩展,可以存储各种类型的数据 转换 数组转换为集合: A ...
- java集合 之 Map集合
Map用于保存具有映射关系的数据,具有两组值:一组用于保存Map中的key:另一组用于保存Map中的value,形成key-value的存储形式. Map集合中包含的一些方法: void clear( ...
- JAVA集合LIST MAP SET详解
1. 集合框架介绍 我们知道,计算机的优势在于处理大量的数据,在编程开发中,为处理大量的数据,必须具备相应的存储结构,之前学习的数组可以用来存储并处理大量类型相同的数据,但是通过上面的课后练习,会发现 ...
- java集合框架——Map
一.概述 1.Map是一种接口,在JAVA集合框架中是以一种非常重要的集合.2.Map一次添加一对元素,所以又称为“双列集合”(Collection一次添加一个元素,所以又称为“单列集合”)3.Map ...
- Java集合框架——Map接口
第三阶段 JAVA常见对象的学习 集合框架--Map集合 在实际需求中,我们常常会遇到这样的问题,在诸多的数据中,通过其编号来寻找某一些信息,从而进行查看或者修改,例如通过学号查询学生信息.今天我们所 ...
- Java集合中Map接口的使用方法
Map接口 Map提供了一种映射关系,其中的元素是以键值对(key-value)的形式存储的,能够实现根据key快速查找value: Map中的键值对以Entry类型的对象实例形式存在: 建(key值 ...
- Java集合之Map和Set
以前就知道Set和Map是java中的两种集合,Set代表集合元素无序.不可重复的集合:Map是代表一种由多个key-value对组成的集合.然后两个集合分别有增删改查的方法.然后就迷迷糊糊地用着.突 ...
- Java集合之Map和Set源码分析
以前就知道Set和Map是java中的两种集合,Set代表集合元素无序.不可重复的集合:Map是代表一种由多个key-value对组成的集合.然后两个集合分别有增删改查的方法.然后就迷迷糊糊地用着.突 ...
- Java 集合之 Map
Map 就是另一个顶级接口了,总感觉 Map 是 Collection 的子接口呢.Map 主要用于表示那些含有映射关系的数据,存储的是一组一组的键值对.Map 是允许你将某些对象与其它一些对象关联起 ...
随机推荐
- header 格式
headers = { 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,* ...
- Trailing Zeroes (I) LightOJ - 1028
题意就是给你一个数让你找它的正因子个数(包括自身,不包括1),这个地方用到一个公式,如果不用的话按正常思路来写会TL什么的反正就是不容易写对. 求任意一个大于1的整数的正因子个数 首先任意一个数n,n ...
- 使用Hexo搭建一个简单的博客(二)
昨天想着用Hexo和github搭一个自己简单的博客,记录一下自己踩过的坑,具体的流程就不重复了,主要参考了一下几篇文章 GitHub+Hexo 搭建个人网站详细教程 使用Hexo+Github一步步 ...
- 《剑指offer》第五十六题(数组中唯一只出现一次的数字)
// 面试题56(二):数组中唯一只出现一次的数字 // 题目:在一个数组中除了一个数字只出现一次之外,其他数字都出现了三次.请 // 找出那个吃出现一次的数字. #include <iostr ...
- python + lisp hy的新手注记1
想在python里用lisp方言hy的目的: 1 用lisp去parse 包含 “数据+简单if控制流(代码.AST)”的配置文件,或者说用包含s-exp的.hy文件作为这类配置文件的实现(而不是用y ...
- CURLE_OPERATION_TIMEDOUT libcurl 错误码28– 操作超时
在多线程情况下出现错误码28 是因为没有调用全局初始化函数 static int GlobleInit();//全局初始化,主程序调用一次,只能一次 static void GlobleFint(); ...
- 牛客练习赛26 xor序列
xor序列 思路:线性基 代码: #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimize(4) #include< ...
- 雷林鹏分享:XML 属性
XML 属性 XML元素具有属性,类似 HTML. 属性(Attribute)提供有关元素的额外信息. XML 属性 在 HTML 中,属性提供有关元素的额外信息: 属性通常提供不属于数据组成部分的信 ...
- java---->Itellij idea报错:错误: 找不到或无法加载主类 main
没有设置好正确的类路径 点击上面圈红色处,在点击Edit Configuration,进入下面设置界面 切换到下面这个界面 红色×消失,运行正常,截图如下
- English trip V1 - 19.Where Am I? 我在哪里?Teacher:Patrick Key:Ask for and directions
In this lesson you will learn to ask for and give directions. 本节课你将学习到学会问路和指路. 课上内容(Lesson) 人类的几种感: ...