所谓集合,就是和数组类似——一组数据。java中提供了一些处理集合数据的类和接口,以供我们使用。

  由于数组的长度固定,处理不定数量的数据比较麻烦,于是就有了集合。

  以下是java集合框架(短虚线表示接口,长虚线表示抽象类,实线表示类,箭头表示实现接口或者继承)(在网络上找的图,不知道原作者,侵权请联系我删除)(总之,关系很复杂,所以不用记得这个图,只是用来吓吓人而已的)。

  下面贴上个人理解之精简版之Collection(集)和Map(地图?暂且这么理解吧),话说思维导图蛮好用,以下是两幅思维导图是为了方便理解自己简化的图,不代表真实继承和实现关系。

1)Collection

Collection (集)

1)List(列表)顺序,可重复。(顺序:元素按你插入的顺序排序)(可重复:可存在内容相同的元素,即a.equals(b)==ture);

2)Set(集合)无顺序,不可重复。(无顺序:元素不一定按照插入顺序排序,类内部有自己的排序方式)(不可重复:不可存在内容相同元素,即a.equals(b)==false);

1.1)List分为ArrayList,Vector,LinkedList等等

     ArrayList:本质为可变长度数组(其实就是系统在你数组空间不够的时候自动帮你换了个更大的数组),底层由数组实现,未实现线程安全。

       Vector(向量):和ArrayList类似,也是可变长度数组,但实现了线程安全,所以速度比ArrayList慢一点。

    /*线程安全:多线程访问时,采用了加锁机制,当一个线程访问数据时,其他线程不能访问该数据。*/

    LinkedList:底层为链表结构。相对于数组类型的集合,插入和删除的操作比较快。

    /*链表结构在插入删除数据所花时间少,数组结构在随机访问所花时间少*/

    

 import java.util.*;

 ArrayList al = new ArrayList();    //默认数组大小为10,也可以传入参数
ArrayList<int> al = new ArrayList<int>(); //使用泛型,规定了只能传入的数据类型 //常用部分方法如下 al.add( 参数); //插入元素
al.get(下标); //获得指定下标元素
al.clear(); //清空容器内所有元素
al.isEmpty(); //判断是否为空
al.remove(下标或者数据的值); //删除元素
al.size() //获得容器(数组)元素的个数
al.set(下标,值) //改变某个下标的值
al.iterator() //很重要,Collection几乎都有的方法,返回一个迭代器,后面会讲用法 //Vector和LinkedList的方法差不多也是这样增删查改
//纳闷的是Vector(向量)中有方法 capacity()可以获得容器大小,其他类没有

ArrayList 示例

2.2)Set分为HashSet,TreeSet,LinkedHashSet等等

    Set区别于List,它是无顺序,不可重复的。使用者若不关心数据的顺序,只关心是否存在于集合中,就可以选用Set类型。

    HashSet:根据数据元素的hash值排序。

    TreeSet:底层为二叉树结构。默认最小化树排序(由小到大)。

    LinkedHashSet:链表结构,按插入顺序排序。

Set的常用方法其实和List类差不多,都是增删查改。

重要的是使用迭代器遍历元素,使用以下方式可以访问Set和List中元素

//假设有SEt类型或者List类型的对象a;

Iterator i=  a.iterator();
while(i.hasNext()){ //如果有元素
System.out.println(i.next()); //似乎是指针的移动
} //此方法通用于含有iterator()的集合,如Set和List等

/*元素放入集Collection中,会失去原有类型。取出使用时注意类型转换

2)Map

Map有别于Collection集合的由纯数据。Map的一个单位结构为一个键值对<key,value>,相当于映射。(联想理解:map地图,key地址,value(值)地点)

(一个地址(key)只能指向一个地点,但是地点(value)不一定只有一个地址(key)来表示。)

map不一定是顺序的,不可重复。

一个key对应一个value,一个value可以有多个key对应。(类似于函数)

在Map中,可以通过查找key来得到对应的value(就像数组的下标访问,不同的是key不一定要为int类型的值,可以为各种类型)。

    HashMap:不按照建立<key,value>的顺序排序,按照元素的hash值排序(似乎不是按照hash值的大小)。

    TreeMap:底层是二叉树,最小化树。

    LinkedHashMap:链表结构,按建立<key,value>的顺序排序,似乎链表结构和数据结构都是线性结构,所以都是按照插入顺序排序。

 import java.util.*;

 Map m = new HashMap();    //或者下面这种更推荐
Map<Integer,String> m = new HashMap<Integer,String>(); //使用泛型,规定了键值对<key,value>的类型。 //假设已经使用了第二种构造方法
m.put(2,"二"); //不同于Collection类型的add,map是用put加入元素
m.put(1,"一"); //由于上面规定了键值对为<Integer,String>类型,只能传规定类型的参数。
m.put(4,"四");
m.put(2,"二"); //已经存在,不会再加入 m.size() //返回元素个数
m.get(key) //获得对应key值的value

HashMap示例

Map其实也可以理解为集合的形式。

1)key集合。

2)values集合。

3)key-values映射集合。

 import java.util.*;

 Map<String,String> m = new HashMap<String,String>();     //<String,String>的映射

 m.put("东","青龙");
m.put("西","白虎");
m.put("南","朱雀");
m.put("北","玄武"); System.out.println( m.keySet() ); //keySet()返回key值的集合,强调map不是顺序的,所以不一定按照插入顺序输出,这里输出的序列是
//南,北,东,西 System.out.println( m.values() ); //返回value值的集合 这里是 朱雀 ,玄武,青龙,白虎 System.out.println( m.entrySet() ); //返回键值对<key,value>的集合 这里是[南=朱雀, 北=玄武, 东=青龙, 西=白虎]

初步的理解就是这样粗浅,如果有什么不对或者补充欢迎来消息。

end;

撰写时间:2017-07-24 22:21:52

修改时间:2017-07-28 10:02:12

我所理解Java集合框架的部分的使用(Collection和Map)的更多相关文章

  1. 【深入理解Java集合框架】红黑树讲解(上)

    来源:史上最清晰的红黑树讲解(上) - CarpenterLee 作者:CarpenterLee(转载已获得作者许可,如需转载请与原作者联系) 文中所有图片点击之后均可查看大图! 史上最清晰的红黑树讲 ...

  2. 《深入理解Java集合框架》系列文章

    Introduction 关于C++标准模板库(Standard Template Library, STL)的书籍和资料有很多,关于Java集合框架(Java Collections Framewo ...

  3. 自顶向下理解Java集合框架(三)Map接口

    Map基本概念 数据结构中Map是一种重要的形式.Map接口定义的是查询表,或称查找表,其用于储存所谓的键/值对(key-value pair),其中key是映射表的索引. JDK结构中还存在实现Ma ...

  4. 深入理解java集合框架之---------LinkedList

    日常开发中,保存一组数据使用的最多的就是 ArrayList, 其次就是 LinkedList 了. 我们知道 ArrayList 是以数组实现的,遍历时很快,但是插入.删除时都需要移动后面的元素,效 ...

  5. 深入理解java集合框架之---------Arraylist集合 -----添加方法

    Arraylist集合 -----添加方法 1.add(E e) 向集合中添加元素 /** * 检查数组容量是否够用 * @param minCapacity */ public void ensur ...

  6. 深入理解java集合框架之---------HashTable集合

    HashTable是什么 HashTable是基于哈希表的Map接口的同步实现 HashTable中元素的key是唯一的,value值可重复 HashTable中元素的key和value不允许为nul ...

  7. 深入理解java集合框架之---------Linked集合 -----构造函数

    linked构造函数 1.LinkedList(): 构造一个空列表的集合 /** * 序列化 */ private static final long serialVersionUID = 1090 ...

  8. 深入理解java集合框架之---------Arraylist集合 -----构造函数

    ArrayList有三个构造方法 ArrayList有三个常量 1.private transient Object[] elementData (数组); 2.private int size (元 ...

  9. 深入理解java集合框架之---------HashMap集合

    深入理解HaspMap死循环问题 由于在公司项目中偶尔会遇到HashMap死循环造成CPU100%,重启后问题消失,隔一段时间又会反复出现.今天在这里来仔细剖析下多线程情况下HashMap所带来的问题 ...

随机推荐

  1. JavaWeb练习-网上名片管理系统

    实验项目名称 JavaWeb网上名片管理系统 实验目的 实现名片的增.删.改.查等操作. 实验基本原理 JSP指令.JSP动作.JSP内置对象等 主要仪器设备及耗材 Win10.Myeclipse 实 ...

  2. vue 存取、设置、清除cookie

    步骤: 第一步:assets目录下添加cookie.js文件 export function setCookie(c_name,value,expire) { var date=new Date() ...

  3. Ubuntu ROS

    设置你的sources.list 将电脑设置为接受来自packages.ros.org的软件 sudo sh -c 'echo "deb http://packages.ros.org/ro ...

  4. wpf 给listview的数据源转换为集合

    目的是点击某个按钮把一条数据从 itemssource中移除 private void delete_Click_1(object sender, RoutedEventArgs e) { DtsIn ...

  5. 关于vue中tamplate和DOM节点浅谈

    前言:在开发前段页面使用vue时,我们能经常看到template标签.这里粗略讲下自己对vue中template理解和使用. 1. 先了解vue vue.js是一个轻巧.高性能.壳组件画的MVVM库. ...

  6. java_30对文件的操作

    1.导包 导commons-io-2.4.jar包 2. public class Demo1Commons { public static void main(String[] args) { fu ...

  7. 对js原型及构造函数的相关理解

    一.js中的原型创建(声明)一个函数,浏览器在内存中会创建一个对象.每个函数都默认会有一个属性prototype指向了这个对象,就是说prototype的属性的值就是这个对象.此对象就是该函数的原型对 ...

  8. EmWin 接触---基础函数

    创建对话框,需求两个基本要素:资源表和对话框过程.对话框可以基于阻塞(使用 GUI_ExecDialogBox())或非阻塞(使用 GUI_CreateDialogBox())方式创建.以下为例: G ...

  9. pip使用国内镜像安装各种库

    1. 指定阿里云镜像, 安装requirements.txt中的所有 pip install -i http://mirrors.aliyun.com/pypi/simple/ --trusted-h ...

  10. mysql 字段指定值靠前排序方法,多字段排序排序方法

    背景:SEO下选择某查询条件 查询展示信息为装修设计师以及设计师作品.设计师原型设计为:选择某风格 例如:简约,则列表出现拥有简约风格的设计师信息以及该设计师类型为简约的作品(3条靠前记录) 浏览原型 ...