Java工具包(java.util)提供了强大的数据结构,主要有以下几种接口或类

  • 枚举Enumeration 接口 从数据集合中取回一系列连续值的方法
  • 位集合 BitSet 可以单独清楚或设置的位和标志
  • 向量Vector 和传统数组类似,大小可以动态改变,初始不用指定大小,支持索引访问
  • 栈 Stack 后进先出FILO的类
  • 字典 Dictionary 抽象类定义键值对映射的数据结构
  • 哈希表Hashtable java2之后又重构了此类,类似HashMap,同步
  • 属性Properties 类,属性列表中,每个键值对都是String类型的。

以上这些都是传统遗留下来的,在java2引入一种新的框架-集合框架Collection Framework。

集合框架被设计成要满足一下几个要求:

  • 高性能。基本集合的实现(动态数组,链表,树,哈希表)也必须高性能。
  • 允许不同类型的集合,以类似的方式工作,具有高度的互操作性。
  • 易于扩展和适应。

     

因此,整个集合框架是围绕一组标准接口设计而成的,开发者可以直接使用这些接口的标准实现,如ArrayList、LinkedList、HashSet、HashMap、HashTable等,也可以通过这些接口取实现自己的集合。

Java集合框架可以分为两大类容器

  • 集合Collection 存储一个元素集合 又可以分为 Set List Queue 三中子类型。 下面是一些抽象类,最后是具体实现类
  • 图Map 存储键值对映射

所有的集合框架都包含下面这些内容

接口:是代表集合的抽象数据类型(ADT),如Collection,Set,List,Map。这些不同的接口以不同方式操作集合。

实现(类): 接口的具体实现,是可以重复使用的数据结构。

算法:实现集合接口的对象里的方法执行一些有用的计算,如搜索和排序,这些方法以多态形式存在。

集合接口

Collection 最基本的集合接口,一个Collection代表一个Object数组。Collection接口存储一组不唯一,无序的对象。

Set接口不保存重复的元素,即存储一组唯一,无序的对象。

List接口是一个有序的Collection ,能够索引访问元素,精确定位元素位置,元素可以重复,存储一组不唯一,有序(插入顺序)的对象。(包括数组list和链表list)

SortedSet接口继承于Set,保存有序。

Map接口 存储一组键值对象,提供key到value的映射

Map.Entry描述一个在Map中的一个元素(键值对对象),Map的内部类。

SortedMap 继承于Map,内部维持key有序。

 

Set和List的区别

Set存储一组无序的,唯一的对象;List存储一组有序(插入顺序),元素可以重复的对象。

Set检索效率低下,删除和插入效率高,插入和删除不会引起元素位置改变(HashSet、TreeSet)

List和数组类似,可以动态增长,查找效率高,删除插入效率低,会引起其他元素位置变动。(ArrayList,LinkedList,Vector)

 

集合的遍历

一般数组遍历是使用for或增强for,这两个方法也可以用在集合中,但还有一种迭代器遍历集合框架元素,迭代器是一个对象,实现了Iterator或者ListIterator接口。

迭代器,使你能够通过循环来得到或删除集合中的元素。ListIterator继承Iterator,双向遍历。

实例,集合的遍历

  1. package com.study.day04;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.HashMap;
  5. import java.util.Iterator;
  6. import java.util.LinkedList;
  7. import java.util.List;
  8. import java.util.Map;
  9. import java.util.Map.Entry;
  10.  
  11. /**
  12. * @author gaochaochao
  13. * @date 2018年11月4日 下午10:05:34
  14. * @description 测试集合的遍历
  15. */
  16. public
    class ArrayListTest {
  17.    enum day{monday,tueday,wednesday,thursday,friday,saturday,sunday};
  18.    public
    static
    void main(String [] args) {
  19.       List<String> list=new ArrayList<>();
  20.       list.add("monday");
  21.       list.add("tuesdat");
  22.       list.add("wednesday");
  23.       list.add("thursday");
  24.       list.add("friday");
  25.       list.add("saturday");
  26.       list.add("sunday");
  27.       //集合遍历方法1 增强for
  28.       for(String s:list) {
  29.          System.out.print(s);
  30.       }
  31.       System.out.println();
  32.       //集合遍历方法2 普通for
  33.       for(int i=0;i<list.size();++i) {
  34.          System.out.print(list.get(i));
  35.       }
  36.       System.out.println();
  37.       //集合遍历方法3 迭代器遍历
  38.       for(Iterator<String> it=list.iterator();it.hasNext();) {
  39.          System.out.print(it.next());
  40.       }
  41.       System.out.println();
  42.       //集合遍历方法四 转化成数组 在遍历
  43.       String[] arrayStr=new String[list.size()];
  44.       list.toArray(arrayStr);
  45.       for(String s:arrayStr) {
  46.          System.out.print(s);
  47.       }
  48.       System.out.println();
  49.  
  50.       LinkedList<String> linkedList=new LinkedList<>(list);
  51.       for(String s :linkedList) {
  52.          System.out.print(s);
  53.       }
  54.       System.out.println();
  55.  
  56.       for(Iterator<String> it = linkedList.iterator();it.hasNext();) {
  57.          System.out.print(it.next());
  58.       }
  59.       System.out.println();
  60.  
  61.       //Map遍历
  62.  
  63.       Map<String,day> map=new HashMap<>();
  64.       map.put("星期一",day.monday);
  65.       map.put("星期二",day.tueday);
  66.       map.put("星期三",day.wednesday);
  67.       map.put("星期四",day.thursday);
  68.       map.put("星期五",day.friday);
  69.       map.put("星期六",day.saturday);
  70.       map.put("星期七",day.sunday);
  71.  
  72.       //只输出map的values
  73.       for(day d:map.values()) {
  74.          System.out.print(d);
  75.       }
  76.       System.out.println();
  77.       //使用增强for遍历map,输出key--> value
  78.       for(Entry<String,day> entry: map.entrySet()) {
  79.          System.out.print(entry.getKey()+"
    "+entry.getValue());
  80.       }
  81.       System.out.println();
  82.       //使用iterator遍历,输出key-->value
  83.       for(Iterator<Entry<String, day>> it = map.entrySet().iterator();it.hasNext();) {
  84.          Entry<String,day> element=it.next();
  85.          System.out.print(element.getKey()+"
    "+element.getValue());
  86.       }
  87.       System.out.println();
  88.    }
  89. }

Java集合框架入门介绍(一)的更多相关文章

  1. 【JAVA集合框架一 】java集合框架官方介绍 Collections Framework Overview 集合框架总览 翻译 javase8 集合官方文档中文版

    原文链接: https://docs.oracle.com/javase/8/docs/technotes/guides/collections/overview.html 原文内容也一并附加在本文最 ...

  2. 【转】Java集合框架List,Map,Set等全面介绍

    原文网址:http://android.blog.51cto.com/268543/400557 Java Collections Framework是Java提供的对集合进行定义,操作,和管理的包含 ...

  3. 34、Java集合框架List,Map,Set等全面介绍(转载)

      Java Collections Framework是Java提供的对集合进行定义,操作,和管理的包含一组接口,类的体系结构.   Java集合框架的基本接口/类层次结构: java.util.C ...

  4. Java集合框架List,Map,Set等全面介绍

    Java集合框架的基本接口/类层次结构: java.util.Collection [I]+--java.util.List [I]   +--java.util.ArrayList [C]   +- ...

  5. Java集合框架介绍。Java Collection Frameworks = JCF

    Java集合框架 = Java Collection Frameworks  = JCF . 为了方便理解,我画了一张思维脑图.

  6. Java最重要的21个技术点和知识点之JAVA集合框架、异常类、IO

    (三)Java最重要的21个技术点和知识点之JAVA集合框架.异常类.IO  写这篇文章的目的是想总结一下自己这么多年JAVA培训的一些心得体会,主要是和一些java基础知识点相关的,所以也希望能分享 ...

  7. Java集合框架的总结

    本篇文章先从整体介绍了Java集合框架包含的接口和类,然后总结了集合框架中的一些基本知识和关键点,并结合实例进行简单分析.当我们把一个对象放入集合中后,系统会把所有集合元素都当成Object类的实例进 ...

  8. 【JAVA集合框架之List】

    一.List接口概述. List有个很大的特点就是可以操作角标. 下面开始介绍List接口中相对于Collection接口比较特别的方法.在Collection接口中已经介绍的方法此处就不再赘述. 1 ...

  9. Java集合框架使用总结

    Java集合框架使用总结 前言:本文是对Java集合框架做了一个概括性的解说,目的是对Java集合框架体系有个总体认识,如果你想学习具体的接口和类的使用方法,请参看JavaAPI文档. 一.概述数据结 ...

随机推荐

  1. 洛谷 P4375 [USACO18OPEN]Out of Sorts G(树状数组求冒泡排序循环次数加强版)

    传送门:Problem 4375 参考资料: [1]:https://www.cnblogs.com/Miracevin/p/9662350.html [2]:https://blog.csdn.ne ...

  2. asp.net上传图片文件自动修改图片大小代码

    #region 图片缩放 /// <summary> /// 图片缩放 /// </summary> /// <param name="savePath&quo ...

  3. Cookie浅谈

    相信大家对Cookie多多少少都有点了解吧~~下面我来谈谈吧: 每个Cookie不超过4K数据,每个网站不超过20个Cookie,所有网站的Cookie总和不超过300个 虽然cookie已经是上世纪 ...

  4. Scala进阶之路-Scala中的泛型介绍

    Scala进阶之路-Scala中的泛型介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 通俗的讲,比如需要定义一个函数,函数的参数可以接受任意类型.我们不可能一一列举所有的参数类 ...

  5. GO语言的进阶之路-面向过程式编程

    GO语言的进阶之路-面向过程式编程 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们在用Golang写一个小程序的时候,未免会在多个地方调用同一块代码,这个时候如何优化你的代码呢 ...

  6. GO语言的进阶之路-go的程序结构以及包简介

    GO语言的进阶之路-go的程序结构以及包简介 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.编辑,编译和运行 A,编辑 Go程序使用UTF-8编码的纯Unicode文本编写.大 ...

  7. ECharts图表引用json数据

    来讲两个图表,一个折线图,一个饼图. 先来看看效果图: 现在来看看代码,先来折线图,后台: (这里的后台太麻烦了,写的太多.可以使用Linq的方式,Linq比较简单写的也少.参考我的这篇文章的2018 ...

  8. 在IIS上启用Gzip压缩(HTTP压缩)

    一.摘要 本文总结了如何为使用IIS托管的网站启用Gzip压缩, 从而减少网页网络传输大小, 提高用户显示页面的速度. 二.前言. 本文的知识点是从互联网收集整理, 主要来源于中文wiki.  使用Y ...

  9. string中substr,find函数使用

    2.string函数 find:某子串的起始位(0开始),函数的第二个参数使用代表从该位开始的后缀 substr:1) x开始的连续y位 2) x开始的后缀 #include<bits/stdc ...

  10. 【BZOJ4826】【HNOI2017】影魔(扫描线,单调栈)

    [BZOJ4826][HNOI2017]影魔(扫描线,单调栈) 题面 BZOJ 洛谷 Description 影魔,奈文摩尔,据说有着一个诗人的灵魂.事实上,他吞噬的诗人灵魂早已成千上万.千百年来,他 ...