集合框架总结

Collection接口:Set接口:HashSet//对象必须实现hashCode方法,元素没有顺序呢,效率比LinkedHashSet高LinkedHashSet//是HashSet的扩展,支持规则集内元素的排序,按元素插入集合的顺序进行提取TreeSet//保证集合中的元素是有序的,与HashSet相反
    List接口:ArrayListLinkedListVectorStack//派生于Vector,栈
Map接口:HashMap//效率高LinkedHashMap//按照添加顺序存储,可以按添加顺序取出TreeMap排序性

1 Collection接口 

这个接口是处理对象集合的根接口。它实现了几种方法:add();size();iterator();Iterator接口:next();hasNext();remove();

2 Set接口

2.1 HashSet具体类(散列集)
散列集是没有重复元素的元素集合。散列表用链表数组实现,每个列表称为桶。可以用add方法添加元素。contains方法用来快速查看是否某个元素已经出现在集中,只在桶内查找元素,不必查看集合中所有元素。
散列表迭代器将依次访问所有的桶。由于散列将元素分散在表的各个位置,所以访问顺序是随机的。只有不关心集合中的元素顺序时才应该使用HashSet。
HashSetTest.java
package General;
import java.util.*;
import java.io.*;
public class hashSetTest{public static void main(String[] args) throws FileNotFoundException{Set<String> words=new HashSet<String>();//方法1:这个方法不需要抛出异常//InputStream inStream=SetTest.class.getResourceAsStream("C:/Users/Maria/Desktop/文件/SDN.txt");//方法2:这个方法需要抛出异常InputStream inStream = new FileInputStream("C:/Users/Maria/Desktop/文件/SDN.txt");Scanner in=new Scanner(inStream);while(in.hasNext())words.add(in.next());   Iterator<String> iter2=words.iterator();for(int i=0;i<words.size()&&iter2.hasNext();i++)System.out.print(iter2.next()+" ");  System.out.println();System.out.println(words.size());System.out.println(words);//使用toString输出集合
    }
}HashSetTest.java

1 输出结果为:
2
3 tyjk ikkl tyujy tukyukuil wse egrerrtuhtirefdhrtj uyku yukuilopcvg gteg
4 9
5 [tyjk, ikkl, tyujy, tukyukuil, wse, egrerrtuhtirefdhrtj, uyku, yukuilopcvg, gteg]

2.2 TreeSet具体类(树集)
  与散列集十分类似。树集是一个有序的集合。可以以任意顺序将元素插入到集合中。在对集合进行遍历时,每个值将自动的按照排序后的顺序呈现(这点与散列集相反)。如:
SortedSet<String>sorter=new TreeSet<String>();
sorter.add("Bob");
sorter.add("Alice");
sorter.add("Carl");
for(String s:sorter)System.out.println(s+" ");

1 结果为:
2     Bob Alice Carl

但是TreeSet如何知道希望元素怎样排序呢,第一种方法,树集假定插入的元素实现了Comparable接口。这个接口定义了一个方法。

1 public interface Comparable<T>
2     int compareTo(T other);//将这个对象(this)与另一对象(other)进行比较,如果this位于other之前则返回负值;如果两个对象在排序顺序中处于相同位置返回0;如果this位于other之后则返回正值。

第二种方法,通过将比较器Comparator对象传递给TreeSet构造器来告诉树集使用不同的比较方法。

1 public interface Comparable<T>
2     int compareTo(T a,T b);

3 List接口

3.1 ArrayList具体类(数组列表)

  ArrayList是List的子类,它和HashSet相反,允许存放重复元素,因此有序。集合元素被访问的顺序取决于集合的类型。如果对ArrayList进行访问,迭代器从索引0开始,每迭代一次索引值加1。然而,如果访问HashSet中的元素,每个元素会按照随机次序出现。
 ArrayListSetTest.java
package General;
import java.util.*;
import java.io.*;
public class ArrayListSetTest{public static void main(String[] args) throws FileNotFoundException{Set<String> set=new HashSet<String>();set.add("a");set.add("b");set.add("c");set.add("c");set.add("d");             Iterator<String> iter1=set.iterator();while(iter1.hasNext())      System.out.print(iter1.next()+" "); //使用Iterator输出集合
        System.out.println();for(String e:set)System.out.print(e+" "); //使用For Each输出结合
        System.out.println();System.out.println(set);//使用toString输出集合
}ArrayListSetTest.java

1 输出结果为:
2 a b c d
3 a b c d
4 [a, b, c, d]

3.2 LinkedLis具体类(链表)
LinkedList是一种可以在任何位置进行高效的插入和删除操作的有序序列。
LinkedListTest.java
package General;
import java.util.*;
public class LinkedListTest {public static void main(String[] args) {List<String> a=new ArrayList<String>();a.add("a");a.add("b");a.add("c");System.out.println(a);List<String> b=new ArrayList<String>();b.add("d");b.add("e");b.add("f");b.add("g");System.out.println(b);//ListIterator在Iterator基础上添加了add(),previous()和hasPrevious()方法ListIterator<String> aIter=a.listIterator();//普通的Iterator只有三个方法,hasNext(),next()和remove()Iterator<String> bIter=b.iterator();//b归并入a当中,间隔交叉得插入b中的元素while(bIter.hasNext()){if(aIter.hasNext())aIter.next();aIter.add(bIter.next());}System.out.println(a);//在b中每隔两个元素删除一个bIter=b.iterator();while(bIter.hasNext()){bIter.next();if(bIter.hasNext()){bIter.next();//remove跟next是成对出现的,remove总是删除前序
                bIter.remove();}}System.out.println(b);//删除a中所有的b中的元素
        a.removeAll(b);System.out.println(a);}
}LinkedListTest.java

结果为:
[a, b, c]
[d, e, f, g]
[a, d, b, e, c, f, g]
[d, f]
[a, b, e, c, g]

3.3 Vector具体类
  Vector: 基于Array的List,其实就是封装了Array所不具备的一些功能方便我们使用,它不可能走入Array的限制。性能也就不能超越Array。所以在可能情况下,我们要多运用Array。另外很重要的一点是Vector"sychrovized" 的,这个是Vector和ArroyList的唯一区别。
它实现了一个类似数组一样的表,自动增加容量来容纳你所需要的元素。使用下表存储和检索对象就像在一个标准的数组中一样。你也可以用一个迭代器从一个Vector中检索对象。Vector是唯一的同步容器类,当两个或多个线程同时访问时,性能也是良好的。
3.4 Stack具体类
  这个类是从Vector派生而来,并且增加了方法实现栈操作,一种后进先出的存储结构。
4 Map接口
4.1 HashMap具体类(散列映射)
  这部分,参考另外一篇文章,HashMap实现原理
4.2 LinkedHashMap具体类(链接映射表)
  连接散列映射表与散列映射表的区别在于,链接散列映射表将用访问顺序,而不是用插入顺序,对映射表条目进行迭代。
  各种具体类的比较:
集合类框架图:

转载于:https://www.cnblogs.com/dragon1013/p/5063355.html

Java学习----集合框架总结相关推荐

  1. java三大集合框架(面试知识储备精华篇)

    java三大集合框架 :  set  list   map 如上图 set list 都属于collection的子接口(collection为顶层接口) Map 不属于collection接口 Se ...

  2. java基础—集合框架

    java基础-集合框架 JDK1.2开始引入了集合框架的概念,以弥补java中只有数组这种容器的单一问题,这些框架多数由接口构成,另外也包含了一些对于接口实现的类,其中这些接口的最上层接口为java. ...

  3. java之集合框架一Collection接口

    1.集合的由来: 我们学习的是面向对象的语言.而面向对象语言对事物的描述是通过对象体现的.为了方便对多个对象进行操作,我们就必须把多个对象进行存储.而要想存储多个对象,就不能是一个基本的变量,而应该是 ...

  4. [转载]Java-集合框架完全解析

    在简书上看到一篇介绍Java集合框架的文章,写得挺详细的,http://www.jianshu.com/p/63e76826e852这是原文地址. 数据结构是以某种形式将数据组织在一起的集合,它不仅存 ...

  5. 【JAVA】集合框架及复杂度

    初识数据结构 补充 一.初识集合框架 1. 什么是集合框架 2. 集合框架的重要性 3. 背后所涉及的数据结构以及算法 二.时间和空间复杂度 1.如何衡量一个算法的复杂度 2. 算法效率 3. 时间复 ...

  6. Java程序设计——集合框架

    目录 一.概述 Collection:单列集合类的根接口,用于存储一系列符合某种规则的元素,它有两个重要的子接口,分别是List和Set.其中,List的特点是元素有序.元素可重复.Set的特点是元素 ...

  7. Java 容器集合框架概览

    Java Collections Framework 集合的概念 集合collection,有时叫做容器container,把多个元素组成一个单元. 早期的Java (pre-1.2) 中包含了Vec ...

  8. java hashmap 的api_JAVA基础--JAVA API集合框架(ArrayList、HashSet、HashMap使用)

    一.集合Collection 1. 集合介绍 变量:表示的内存中的一个空间,只能保存确定类型的单个数据 数组:表示的是内存中的多个连续的空间,这些空间中可以存储多个同类型的数据. 后期继续学习面向对象 ...

  9. Java基础-------集合框架

    一,集合简介 1.1 集合由来: 对象的存储:①数组(基本数据类型  & 引用数据类型)  ②集合(引用数据类型)     >数组存储数据的弊端:长度一旦初始化以后,就不可变:真正给数组 ...

最新文章

  1. 【camera】基于深度学习的车牌检测与识别系统实现(课程设计)
  2. cocos2d-x jsbinding 在线更新策略设计
  3. C语言之父,UNIX之父丹尼斯·里奇去世 享年70岁
  4. Warning: Multiple build commands for output file /xxx
  5. 研究生从事学术研究的20条法则:导师错的时候不多!
  6. php的cms是什么意思,phpcms是什么系统
  7. Redis笔记(七)Java实现Redis消息队列
  8. linux系统调整中文字符,Linux字符模式下中文显示
  9. 多媒体计算机教室模式图,多媒体教室设备连接示意图.doc
  10. OpenSesame:一个能够攻击fixed-pin设备的工具
  11. 《TensorFlow技术解析与实战》——3.3 可视化的例子
  12. 月入过万的外卖CPS红包小程序源码分享(附搭建教程)
  13. 人人网(cookie登录)
  14. 批量发送邮件(java开发、带图片和附件)
  15. 04Java异常-3. 异常处理方式之try..catch
  16. HCTF 2018-warmup
  17. 未来的趋势—电子签约流行
  18. 计算机专业里的麦课尔雅,艺术导论超星尔雅网课答案2020年_高校邦_计算机文化基础_章节答案...
  19. 软件需求工程 高校教学平台 需求工程计划
  20. 学习计算机嵌入式的笔记汇总

热门文章

  1. Github | 标星9W+如何准备谷歌面试?
  2. 复练-关于面试的技能树-自信从容的参加面试
  3. 鸿蒙adb调试权限,真机ro.debuggable全局调试权限修改为1(Nexus 6为例)
  4. python中concat的用法_python pandas concat用法及代码示例
  5. Centos7下Confluence5.6.6安装
  6. Spring Boot 自定义属性值
  7. php千封邮件怎么快速发送,如何在PHP中无限制地发送数千封电子邮件?
  8. Maven的基本应用
  9. 制作 macOS High Sierra U盘USB启动安装盘方法教程 (全新安装 Mac 系统)
  10. Git_Eclipse:[1]Git安装插件