常用的集合有List,Set,Map,这三个都是接口,
其中List,和Set继承于Collection
而Map是一个可以保存键值对的接口

Collection接口
Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)。
一些 Collection允许相同的元素而另一些不行。一些能排序而另一些不行。
Java SDK不提供直接继承自Collection的类,Java SDK提供的类都是继承自Collection的“子接口”如List和Set。

所有实现Collection接口的类都必须提供两个标准的构造函数:无参数的构造函数用于创建一个空的Collection,
有一个 Collection参数的构造函数用于创建一个新的Collection,这个新的Collection与传入的Collection有相同的元素。
后一个构造函数允许用户复制一个Collection。

如何遍历Collection中的每一个元素?不论Collection的实际类型如何,它都支持一个iterator()的方法,该方法返回一个迭代子,使用该迭代子即可逐一访问Collection中每一个元素。典型的用法如下:
Iterator it = collection.iterator(); // 获得一个迭代子
while(it.hasNext()) {
Object obj = it.next(); // 得到下一个元素
}
由Collection接口派生的两个接口是List和Set。

List接口,List接口常用的两个实现类是LinkedList类和ArrayList类
List是有序的Collection,使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引(元素在List中的位置,类似于数组下标)来访问List中的元素,这类似于Java的数组。
和下面要提到的Set不同,List允许有相同的元素。
除了具有Collection接口必备的iterator()方法外,List还提供一个listIterator()方法,
返回一个 ListIterator接口,和标准的Iterator接口相比,
ListIterator多了一些add()之类的方法,允许添加,删除,设定元素, 还能向前或向后遍历。 

LinkedList类
LinkedList实现了List接口,允许null元素。此外LinkedList提供额外的get,remove,insert方法在 LinkedList的首部或尾部。
这些操作使LinkedList可被用作堆栈(stack),队列(queue)或双向队列(deque)。
LinkedList类采用链表结构保存对象,这种结构的优点是便于向集合中插入和删除对象,经常需要向集合中插入/删除对象时,使用此类
效率会比较好,但对于随机访问集合中的对象,则会较慢.

ArrayList类
ArrayList实现了可变大小的数组。它允许所有元素,包括null。可以根据索引位置对集合进行快速的随机访问,缺点是向指定的索引位置
插入对象或删除对象的时候速度较慢,size,isEmpty,get,set方法运行时间为常数。
实例化方法如下:
List<String> list=new ArrayList<String>();

总结:基于Array的List适合查询,而LinkedList(链表)适合添加,删除操作。

Set接口
Set是一种不包含重复的元素的Collection,即任意的两个元素e1和e2都有e1.equals(e2)=false,Set最多有一个null元素。
很明显,Set的构造函数有一个约束条件,传入的Collection参数不能包含重复的元素。
Set接口常用的实现类有HashSet和TreeSet.
实例化方法如下:
Set<String> set1=new HashSet<String>();
Set<String> set2=new TreeSet<String>();
Set 集合中的元素是不能重复的,而且是无序的,遍历Set集合元素的时候,有可能与插入Set元素时候的顺序并不一样
遍历Set集合的方法时,可以用For循环,
或者用Collection接口的iterator()方法取得迭代器来遍历

Map接口
请注意,Map没有继承Collection接口,Map提供key到value的映射。
一个Map中不能包含相同的key,每个key只能映射一个 value。
Map接口提供3种集合的视图,Map的内容可以被当作一组key集合,一组value集合,或者一组key-value映射。
即Map接口遍历的时候常用到的三个方法:
entrySet()
返回 Set<Map.Entry<K,V>>此映射中包含的映射关系的 Set 视图。

keySet()
返回Set<K> 此映射中包含的键的 Set 视图。

values()
返回Collection<V>此映射中包含的值的 Collection 视图。

Map接口常用的实现类有HashMap和TreeMap.通常建议使用HashMap,因为HashMap类实现的对于添加和删除的行为
效率更高.HashMap是基于哈希表的Map接口的实现.
而TreeMap中的映射存在一定的顺序,如果希望Map集合中的对象存在一定的顺序,那就使用TreeMap类

HashMap允许使用Null值和Null的元素,但是要求键的唯一性,此类不保证集合的顺序,特别是不保证该顺序恒久不变
TreeMap类不仅实现的Map接口,还实现了SortedMap接口,因此该类的集合中具有一定的顺序.但是在添加.删除和定位的时候,
性能会比HashMap类差一些.由于TreeMap类实现的Map集合中的映射关系是根据键对象按照一定的顺序排序的.因为不允许键的对象是Null
实现的应用中,可以通过HashMap类创建Map集合,当需要顺序输出的时候,再创建一个键值对相同的映射关系的TreeMap类,然后输出

练习代码示例:

import java.util.*;
class test
{
public static void main(String[] args){
List<String> d=new LinkedList<String>();
d.add("aaa");
d.add("bbb");
d.add("ccc");
d.add("ddd");
d.add("eee");
Set<String> set=new HashSet<String>();
set.add("1");
set.add("1");
set.add("1");
set.add("1");
set.addAll(d);
set.add("2");
Set<String> intset=new TreeSet<String>();
intset.add("1");
intset.add("2");
intset.add("3");
intset.add("4");
intset.add("5");
intset.add("6");
Iterator<String> i=intset.iterator();
while(i.hasNext())
{
System.out.println(i.next());
}
Map<String,String> map=new HashMap<String,String>();
map.put("1","11");
map.put("2","22");
map.put("3","33");
map.put("4","44");
for(int l=1;l<map.size();l++){
System.out.println(map.get(""+l+"")+"");
}
Collection<String> vv=map.values();
Iterator<String> vvi=vv.iterator();
while(vvi.hasNext()){
System.out.println(vvi.next());
}
Set<String> keySet=map.keySet();
vvi=keySet.iterator();
while(vvi.hasNext()){
System.out.println(map.get(vvi.next()));
}
}
}

平时集合使用的比较多,熟悉集合类,有时会意想不到的效果哦.

转载于:https://www.cnblogs.com/fylx/p/3961530.html

JAVA学习之常用集合List,Set,Map相关推荐

  1. List精讲(Java版)·算法常用集合处理方法

    List精讲(Java版)·算法常用集合处理方法 请仔细查阅每一个注释: import java.util.ArrayList; import java.util.Collections; impor ...

  2. Java常用集合List、Map、Set介绍以及一些面试问题

    文章目录 集合框架图 常用接口介绍以及区别 常用接口类介绍 ArrayList LinkedList HashMap ConcurrentHashMap TreeMap LinkedHashMap H ...

  3. 黑马程序员--Java学习日记之集合(map集合和collections类)

    -- Java培训.Android培训.iOS培训..Net培训.期待与您交流! ---  一.概述 将键映射到值的对象.一个映射不能包含重复的键:每个键最多只能映射到一个值. 在使用Collec ...

  4. 黑马Java学习笔记之-----集合框架

    ---------------------- android培训.java培训.期待与您交流! ---------------------- 一.概述: Java的集合类是一种特别有用的工具类,它可以 ...

  5. 【原】Java学习笔记028 - 集合

    1 package cn.temptation; 2 3 import java.util.HashSet; 4 import java.util.Set; 5 6 public class Samp ...

  6. Java学习笔记3——集合框架

    文章目录 1 集合的概念 2 Collection体系集合 Collection父接口 3 List接口与实现类 List接口 List实现类 ArrayList Vector LinkedList ...

  7. java学习总结之集合框架

    前言 在JDK1.2之前,java是没有完整的集合框架的,只有一些简单的可以扩展的容器类,如Vector.Stack.Hashtable等,这些容器类它们解决了数组不能动态扩容和使用复杂的问题,到了J ...

  8. 黑马程序员--Java学习日记之集合(collection类与list接口)及泛型概述

     ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一,集合概念   之前我们存储大量的对象,可以使用数组:   但数组有两个缺陷:   1. ...

  9. Java学习计划07:集合、泛型

    目录 Collection List Set 泛型 Map Collections Collection collection是单例集合的顶层接口,它表示一组对象,这些对象也称为Collection的 ...

最新文章

  1. CVPR 2021|SensatUrban:城市规模点云数据集
  2. R语言使用yardstick包的lift_curve函数评估多分类(Multiclass)模型的性能、并使用autoplot函数可视化模型在每个交叉验证(或者重采样)的每一折fold在每个分类上的提升
  3. linux-2.6.18源码分析笔记---中断
  4. scapy安装and简介
  5. pl/sql远程连接oracle服务器问题(各种情况) .,plsql远程连接oracle服务器问题(各种情况).docx...
  6. LeetCode 31 下一个排列
  7. 基于matlab实现的人脸检测
  8. FreeModbus ASCII传输
  9. THINKPHP_关联模型MANY_TO_MANY
  10. [debug] 延长Linux中sudo密码在终端的有效时间
  11. matplotlib简介
  12. 我的世界网易版java材质包下载_我的世界超强光影SMUS网易专版
  13. 大功率MOS管选型手册及可申请样品-KIA MOS管
  14. 开源SDK实现Android视频直播
  15. Android游戏开发是视频教程
  16. 顺丰笔试-赏金猎人2020-08-20(参考时间最大利益)
  17. 计算机控制op,《计算机控制技术》
  18. css亮黄色_写给前端工程师的色彩常识:色彩三属性及其在CSS中的应用
  19. PLC实训 — 变频器与电机认识
  20. 太空垃圾回收-7自由度机器人MATLAB仿真

热门文章

  1. Storm单节点部署及启动
  2. Python Django 全局上下文代码示例
  3. Python Django 配置静态资源访问(settings配置)
  4. Hadoop分布式文件系统hdfs的shell操作命令大全
  5. Xshell分屏显示
  6. 手机端展现table_百度信息流广告外包丨百度信息流广告的展现样式和收费方式?...
  7. Qt for Android 自定义启动页(解决启动页拉伸的问题)
  8. 佳明245接收微信消息
  9. 内存管理代码分析 stm32
  10. 记录MongoDB启动报错MongoDB not running on the provided host and port