本人这几天在一本java教学教材中看到有集合类这一词,这到底是干嘛的,会不会是和数组一样保存多个对象,然后也可以从中取一些元素???
我先做了一张图,这样集合类各个接口各个实现类的关系就清晰了,

集合类分为单列集合和双列集合,先来总结一下这个单列集合。
Collection:Collectiom是单列集合的根接口,也称为超级接口,常用的子接口有List接口和Set接口,用来储存一系列符合规则的元素。
List: List接口有三个主要实现类,ArrayList,LinkedList,Vector; List具备了Collection接口的所有方法和属性;List接口中的元素是有序的,而且是可重复的;List方法如下图:

ArrayList: 在ArrayList内部封装了一个长度可变的数组对象,当存入的元素超过数组长度时,ArrayList会在内存中分配一个更大的数组来储存这些元素,因此Arraay集合可以看作一个长度可变的数组;但ArrayList 其中有个缺点,就是增加或删除指点位置的元素,会创建新的数组,因此它的效率就比较低,这个时候就要使用LinkedList集合了。下面代码是实现Arraylist的一些方法:

package com.jihe;
import java.util.ArrayList;
import java.util.Iterator;
public class ArrayList_1 {public static void main(String[] args) {ArrayList al = new ArrayList();     //创建Arraylist集合al.add("小明 ");     al.add("小李");al.add("小陈");//  al.clear();    //   删除集合中所有元素//  al.addAll(al);    //将特定集合中的所有元素添加到该集合中//  al.remove(2);     // 删除该集合中特定位置的元素//  al.removeAll(al);   //删除集合中的所有元素//  al.add(1, "小黑");    //   将元素插入List集合的1处;//  Object oj = al.get(2);   //  返回集合索引的index处的值(这里的index=2)Iterator it = al.iterator();      //获得Iterator 对象       利用iterator()获得迭代器对象while(it.hasNext()){       //  判断ArrayList集合中是否含有下个元素System.out.println(it.next());      //  取出ArrayList集合中的元素}           }
}

LinkedList: 其内部维护一个双向循环链表,链表中每一个元素都使用引用的方式来记住它的前一个元素和后一个元素,从而将所有的元素彼此连接起来,所以在增删元素的时候中具有很高的效率;下面代码是集合LinkekList的一些方法:

package com.jihe;
import java.util.LinkedList;
public class LinkedList_1 {public static void main(String[] args) {LinkedList ll = new LinkedList();ll.add("大明");ll.add("大李");ll.add("大陈");//  ll.add(0, "大白");    // 在列表中指定位置插入指定的元素//  ll.addFirst("大白");   // 将指定元素插入列表的开头//   Object ob = ll.removeFirst();     //  移除并返回此表的第一个元素//  Object ob1 = ll.removeLast();       //除并返回此表的最后一个元素//  System.out.println(ob);//    System.out.println(ob1);System.out.println(ll);}}

Vector: Vector类和ArrayList类的用法一样的,只是ArrayList的对象是异步的,而Vector的对象是同步的,所以考虑到线程安全的话就要用Vector;
下图是Vector 和Arraylist的一些同异:


Set: Set接口主要实现类有两个,HashSet ,TreeSet; Set接口的元素是无序的,并且是不可重复的。
HashSet:根据哈希值确定元素的储存位置, HashSet继承AbstractSet类,实现Set、Cloneable、Serializable接口。其中AbstractSet提供 Set 接口的骨干实现,从而最大限度地减少了实现此接口所需的工作。还有一点,存入对象时,首先会调用该类的hashcode()方法和equals()方法;
LinkedHashSet: LinkedHashSet是具有可预知迭代顺序的Set接口的哈希表和链接列表实现。LinkedHashSet继承HashSet接口,有以LinkedHashMap为基来实现的。
TreeSet:TreeSet 是 利用二叉树的方法来储存元素,存入一个元素都会与其他元素进行比较,意味着必须实现Coparator接口中的CompareTo()方法;或者实现一个自定义的比较器。


粗略的讲完单列集合,接下来总结一下双列集合。
Map:Map 是双列集合的根接口,常用的实现类有*HashMap,TreeMap,HashTable;*Map接口的每一个元素都包含一个对象键Key和一个值对象Value;键与值之间存在一种一一对应的关系,这种关系叫做映射;一个键只能对应一个值,键是唯一的,不重复的,(键相等,值覆盖);
HashMap: 它是一个散列表,它储存的内容是键值对,即(key,value)映射关系,适合插入,删除,定位元素,它的key、value都可以为null。此外,HashMap中的映射不是有序的。它的实现不是同步的的,意味着它不是线程安全的。HashMap与Map的关系如下:

LinkedHashMap:LinkedHashMap是HashMap的一个子类,它保留插入的顺序,如果需要输出的顺序和输入时的相同,那么就选用LinkedHashMap。 LinkedHashMap是Map接口的哈希表和链接列表实现,具有可预知的迭代顺序。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 LinkedHashMap实现与HashMap的不同之处在于,后者维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,该迭代顺序可以是插入顺序或者是访问顺序。
注意,此实现不是同步的。如果多个线程同时访问链接的哈希映射,而其中至少一个线程从结构上修改了该映射,则它必须保持外部同步。
TreeMap:TreeMap集合是用来存储键值映射关系的,其中不允许出现重复的键,和TreeSet 一样,通过二叉树的原理来保证键的唯一性。适用于按自然顺序或自定义顺序遍历键(key)。一般情况下排序才用到TreeMap.
HashTable:表示键/值对的集合,这些键/值对根据键的哈希代码进行组织。它与HashMap相似,区别在于HashTable是线程安全的,但HashTable存取元素的速度是相当的慢,基本都被HashMap类所取代。HashTable中有一个子类Properties非常重要,Properties主要用来存储字符串中的键和值;



下面单独讲几个常用接口

  1. Iterator接口

在没有Iterator接口之前,需要使用Enumeration接口,1Enumeration对象有两个重要方法,hasMoreElement()方法判断是否存在下一个元素;
nextElement()方法逐一取出每一个元素;
Iterator对象也叫迭代器,迭代顺序从第一个到最后一个;Iterator有两个重要方法,使用hasNext()方法判断是否存在下一个元素,如果存在,则使用next()方法将元素取出,否则说明已经到了集合末尾,停止遍历元素。注意,使用next()方法取出元素时必须保证获取的元素存在,不然就会抛出异常。
与Collection.Map有所不同,Collection主要用来存储元素,Iterator主要用来迭代访问(遍历)Collection中的元素;


说到遍历,在这里补充一个foreach循环知识点,
语法格式为:

for(容器中元素类型    临时变量:容器变量){执行语句
}

foreach循环与for循环相比优点: 不需要获取容器的长度,不需要索引访问容器的元素;缺点:只能访问集合中的元素,不能对其中的元素进行修改。
2. ListIterator接口

ListIterator接口 是Iterator的子类,它有两个重要方法,利用hasPrevious()方法和Previous 方法实现反向迭代元素。


下面补充一个泛型的简要内容
使用<参数化类型>的方式指定该类中的方法操作的数据类型
格式例如为:
ArrayList<参数化类型> list = new ArrayList<参数化类型>();

package com.jihe;
import java.util.ArrayList;
public class Fanxing {public static void main(String[] args) {ArrayList <String> list = new ArrayList <String>();     //  创建 ArrayList集合,使用范型list.add("我");list.add("爱");list.add("你");for(String list2:list){  //  遍历System.out.print(list2);}}
}

java中集合类的一些简单总结相关推荐

  1. Java中利用socket实现简单的服务端与客户端的通信(中级)——实现任意双向通信

    本文计划采用socket实现客户端和服务端的任意双向通信,即客户端可以随时给服务端发消息,服务端也可以随时给客户端发消息,最终结果就是一个类似与QQ的聊天软件的功能. 以下代码可以直接拷贝到Eclip ...

  2. Java中利用socket实现简单的服务端与客户端的通信(基础级)

    在上一篇文章中,简单的介绍了java中入门级的socket编程,简单的实现了客户端像服务器端发送数据,服务器端将数据接收并显示在控制台,没有涉及多线程.上一篇文章的链接:Java中利用socket实现 ...

  3. java中List Stream的简单使用

    java中List Stream的简单使用 一,api入门案例 实体类 public class Person {private int id;private String name;private ...

  4. JAVA中一维数组的简单使用!

    JAVA中一维数组的简单使用! 一.数组的概述 1.数组的常见概念: 数组名 下标(或索引) 元素 数组的长度 2. 数组本身是引用数据类型,而数组中的元素可以是任何数据类型,包括 基本数据类型和引用 ...

  5. JAVA中集合类概述

    目录 前言 一.集合类概述 二.Collection 1.List实现 2.set实现 三.Map 总结 前言 这篇文章是根据张席主编的<JAVA语言程序设计教程>提炼出来的一些JAVA中 ...

  6. java indexof方法_【3-14】Java中集合类list的增删改查

    Hello,大家好,我是大家最亲爱的siki老师,每天都会在这里为大家带来一个Java语法中有趣的知识点,Q群175158287,欢迎同大家多多交流哈! 今天给大家带来的是Java中list类的使用, ...

  7. Java中使用AMQ的简单实例

    好了,接上一篇,在对JMS的概念以及AMQ的下载安装有了一定认识之后,本篇就来学习一下AMQ在Java中的Hello World级使用(下文我将着重把重点写在注释里面,请注意代码注释部分!!!). 开 ...

  8. Java中利用socket实现简单的服务端与客户端的通信(入门级)

    Java编程中,要想要使用网络通信,就离不开Socket编程,在此对socket进行简单的介绍.首先声明,这是一个入门级的介绍,仅仅简单的实现了客户端向服务端发送数据,服务端正常的接收数据,当接收到特 ...

  9. JAVA中N种单例模式简单概括(防反射,克隆,序列化,实例化,多线程安全)

    里面包括了老生常谈的饿汉式,懒汉式以及枚举类 静态代码块 序列化场景下,多线程场景下反射情况下的问题. 话不多说,直接开干. 饿汉式就是立即加载的意思,立即加载在中文中有着急,急迫的意思.所以就叫饿汉 ...

最新文章

  1. python爬虫吧-Python爬虫案例集合
  2. C++20 - 下一个大版本功能确定
  3. ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效
  4. HID接口设备-固件要求
  5. Upsync:微博开源基于Nginx容器动态流量管理方案
  6. CSS3之计算长度值------calc()
  7. 带有Prometheus的弹簧靴和千分尺第5部分:旋转Prometheus
  8. bootstrap-select控件全选,全不选,查询功能实现
  9. Win2003下Exchange2003部署图解之七
  10. HDOJ 2544(Dijkstra)
  11. python datetime strptime_python datetime模块strptime/strptime format常见格式命令_施罗德_新浪博客...
  12. windows mobile 5.0 开发, 新手路!
  13. 互联网共享图书馆+自习室商业计划书
  14. 林軒田《机器学习基石》课程总结
  15. LaTeX详细安装步骤和简明教程
  16. 退出登录如何清除token
  17. JS中使用java方法与数据库交互
  18. codery-why蘑菇街商城项目梳理笔记
  19. linux lzma命令,linux lzma安装
  20. Lession11 集合和泛型(ArrayList方法、Arraylist类、ArrayList添加对象、ArrayList长度、HashTable类、Hashtable类练习-----)

热门文章

  1. jsp页面 字体颜色 白色_CSS 文本字体颜色设置方法(CSS color)
  2. MATLAB经典测试图像集 Standard test image
  3. Python高级正则表达式
  4. 第二章 从C过渡到Java
  5. Python定义多行字符串
  6. 设计模式----代理模式
  7. 微信小程序:微群人脉微信小程序源码下载全新社群系统优化版支持代理会员系统功能超高收益
  8. javas文档对象模型(DOM)
  9. [网络流24题] 圆桌聚餐
  10. 中国人真实收入水平2022年