zoukankan      html  css  js  c++  java
  • Java集合框架入门介绍(一)

    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. }
  • 相关阅读:
    使用openssl实现ECDSA签名以及验证功能(附完整测试源码)
    【转载】浅谈Linux内存管理机制
    【转载】Abstract Factory Step by Step --- 抽象工厂
    【转载】动态规划:从新手到专家
    Windows Container 和 Docker:你需要知道的5件事
    十年
    Docker,容器,虚拟机和红烧肉
    新的用户故事待办列表就是一副地图
    MarkDown/reST 文档发布流水线
    docker4dotnet #5 使用VSTS/TFS搭建基于容器的持续交付管道
  • 原文地址:https://www.cnblogs.com/gaochaochao/p/9906459.html
Copyright © 2011-2022 走看看