集合——对象的容器

集合与数组相似,不同的是,集合的长度可变并且只能组合引用类型数据,如果要组合基本类型,则需要装箱成包装类

Collection体系集合

  • Collection父接口

    Collection的实现类中含有许多的方法可供使用

    boolean add (0bject obj) //添加一一个对象。
    boolean addA1l (Collection c) //将参数集合中的所有对象添加到此集合中。
    boolean contains (Object o) //检查此集合中是否包含参数对象
    boolean equals (Object o) //比较此集合是否与参数对象相等。
    boolean isEmpty() //判断此集合是否为空
    boolean remove (Object o) //在此集合中移除参数对象
    void clear() //清空此集合中的所有对象。
    int size() //返回此集合中的元素个数。
    Object[] toArray() //将此集合转换成数组。

    用Iterator迭代器遍历Collection集合

    Iterator类中有三个方法可供遍历时使用

    //next()方法,返回迭代的下一个元素
    //hasNext()方法,判断迭代有无更多元素(如果next方法返回的是元素而不是错误,该方法为true)
    //remove()方法,删除迭代器当前迭代的对象,在使用迭代器删除元素时,只能使用remove方法
  • List子接口

    List接口的实现类继承Collection实现类,所以List接口中含有Collection类的方法,除此之外,该类也有自己的子方法

    void add(int index, 0bject o) //在index位置插入对象o。
    boolean addA1l(int index, Collection c) //将一个集合中的元素添加到此集合中的index位置。
    0bject get(int index) //返回集合中指定位置的元素。
    List subList(int fromIndex, int toIndex) //返回fromIndex和toIndex之间的集合元素。

    List对象的遍历

    与Collection类实例不同的是,List对象是有序的,所以可以用下标引用集合成员,可以通过get方法实现for循环等

    在普通迭代器的基础上,List类还提供了ListIterator迭代器(列表迭代器),支持从任意方向遍历集合(逆向用hasPrevious()方法和previous()方法)

List实现类

  • ArrayList

    用数组结构实现,查询快,增删慢,运行效率快,线程不安全

    //默认容量,初始化容量为0,任意添加一个元素后,容量变为10,满则扩容
    private static final int DEFAULT_CAPACITY = 10;
    //每次扩容为原容量的1.5倍
    int newCapacity = oldCapacity + (oldCapacity >> 1);
  • Vector

    数组结构实现,查询快,增删慢,运行效率慢,线程安全

    vector中提供了一种额外的遍历方法:枚举器

    用法类似于迭代器

    Enumeration a =vector.elements();
    while(a.hasMoreElements()){
    System.out.println(a.nextElement());
    }
  • LinkedList

    双向链表结构实现,增删快,查询慢

泛型

  • 泛型类

    public class MyGeneric<T> {
    //用泛型创建变量,不能实例化(不能确保类类型)
    T t;
    //用泛型做参数
    public void print(T t){ System.out.println(t); }
    //泛型作为返回值
    public T test(){ return t; }
    }
    //语法:类名+<T>

    创建泛型类

    MyGeneric<String> myGeneric =new MyGeneric<String>();
    //创建后可以用类中的方法
    myGeneric.t="粗莓";
    myGeneric.print("啦啦啦");
    //不同的泛型类之间不能相互赋值
  • 泛型接口

    public interface MyGenericInterface<T>{}
    //语法:接口名+<T>
  • 泛型方法

    public <T> void generic(){...}
    //返回值和参数也可以是T类型
    public <T> T generic(T t){return t;}
    //语法:<T>+返回值+方法名

Set实现类

  • HashSet

    基于HashCode(哈希值)计算元素存放位置

    存储过程

    (1)根据hashcode计算存储位置,如果为空,则存储,否则执行第二步

    (2)执行equals方法,如果为true则为重复元素,否则形成链表

  • TreeSet

    实现了SortedSet接口,基于红黑树排列元素,通过Comparable接口指定排序规则,通过CompareTo方法确认是否为重复元素,所以该集合自定义元素必须实现Comparable接口并重写CompareTo方法

    还有一种方法可以避免元素对接口的实现,即Comparator,定制比较器。实现方法如下:

    TreeSet<Person> treeSet = new TreeSet<>(new  Comparator<Person>(){
    @Override
    public int compare(Person o1, Person o2) {
    //重写方法,o1和o2为比较双方
    }
    });

Map集合体系

存储任意键——值(Key——Value)对儿

  • Map父接口

    常用方法

    V put(K key,V value) //将对象存入到集合中,关联键值。key重复则覆盖原值。
    0bject get (Object key) //根据键获取对应的值。
    keySet() //返回所有的key
    Collection<V> values()//返回包含所有值的Collection集合
    Set<Map.Entry<K, V>> //键值匹配的Set集合

​ Map集合元素不允许重复,当有一个key值重复的元素加入时,如果Value值不同,则更新Key对应的Value,如果Value值相同则不加入

  • HashMap

    HashMap的判重方式和HashSet类似,如果需要比较对象元素内容,则需要重写hashCode和equals方法

    static final int DEFAULT_INITIAL_CAPACITY = 1 << 4;//hashMap初始容量大小
    static final int MAXIMUM_CAPACITY = 1 << 30;//hashmap的数组最大容量
    static final float DEFAULT_L0AD_FACTOR = 0.75f; //默认加载因子
    static final int TREEIFY_THRESHOLD = 8;//jdk1.8 当链表长度大于8时,调整成红黑数
    static final int UNTREEIFY_THRESHOLD = 6; //jdk1.8 当链表长度小于6时,调整成链表
    static final int MIN_TREEIFY_CAPACITY = 64;// jdk1.8 当链表长度大于8时,并且集合元素个数大于等于64 时,调整成红黑数
    transient Node<K, V>[] table;//哈 希表中的数组
    size;//元素个数
    //HashMap刚创建时,table是nu1l,为了节省空间,当添加第-一个元素时,table容量调整为16
    //当元素个数大于阈值(16*0.75=12)时,会进行扩容,扩容后大小为原来的2倍。目的是减少调整元素的个数。
    //jdk1.8当每个链表长度大于8,并且元素个数大于等于64时,会调整为红黑树,目的提高执行效率
    //jdk1.8当链表长度小于6时,调整成链表
    //jdk1.8以前,链表时头插入,jdk1 .8以后时是尾插入
  • Hashtable

  • TreeMap

    和TreeSet类似,需要对象元素实现Comparable接口并重写CompareTo方法或者使用定制比较器conparator

  • Properties集合

    与流相关的集合,设计了许多用来存储和加载流的方法

    list(PrintWriter T);//流写入
    store(FileOutputStream T,"注释");//集合保存
    load(FileInputStream T)//流加载

Collections工具类

  • public static void reverse(List<?> list) //反转集合中元素的顺序
    public static void shuffle(List<?> list) //随机重置集合元素的顺序
    public static void sort(List<T> list) //升序排序(元素类型必须实现Comparable接口)
    static <T> void copy(List<? super T> dest, List<? extends T> src) //将src集合copy到dest集合中,dest集合的大小必须等于src集合

Java基础篇——集合框架的更多相关文章

  1. Java基础--说集合框架

    版权所有,转载注明出处. 1,Java中,集合是什么?为什么会出现? 根据数学的定义,集合是一个元素或多个元素的构成,即集合一个装有元素的容器. Java中已经有数组这一装有元素的容器,为什么还要新建 ...

  2. 黑马程序员——【Java基础】——集合框架

    ---------- android培训.java培训.期待与您交流! ---------- 一.集合框架概述 (一)集合框架中集合类关系简化图 (二)为什么出现集合类? 面向对象语言对事物的体现都是 ...

  3. java基础37 集合框架工具类Collections和数组操作工具类Arrays

    一.集合框架工具类:Collections 1.1.Collections类的特点 该工具类中所有的方法都是静态的 1.2.Collections类的常用方法 binarySearch(List< ...

  4. Thinking in java基础之集合框架(转载)

    集合简介(容器)把具有相同性质的一类东西,汇聚成一个整体,就可以称为集合,例如这里有20个苹果,我们把每一个苹果当成一个东西(一个对象),然后我们借用袋子把这20个苹果装起来,而这个袋子就是集合(也叫 ...

  5. Java基础之集合框架(Collection接口和List接口)

    首先我们说说集合有什么作用. 一.集合的作用 1.在类的内部,对数据进行组织: 2.简单而快速的搜索大数量的条目: 3.有的集合接口,提供一系列排列有序的元素,并且可以在序列中间快速的插入或者删除有关 ...

  6. java基础之集合框架

    6.集合框架: (1)为什么出现集合类? 面向对象对事物的体现都是以对象的形式,为了方便对多个对象的操作,就对对象进行存储. 集合就是存储对象最常用的一种方式. (2)数组和集合都是容器,两者有何不同 ...

  7. Java基础之集合框架——使用堆栈Stack<>对象模拟发牌(TryDeal)

    控制台程序. public enum Rank { TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, JACK, QUEEN, KING, A ...

  8. Java基础之集合框架——使用集合Vector<>挑选演员(TryVector)

    控制台程序. public class Person implements Comparable<Person> { // Constructor public Person(String ...

  9. Java基础之集合框架类及泛型简介

    Collection接口 Collection 通用的常见方法 add()添加一个元素,可以指定脚标 addAll()将一个collection放入 clear()清除 remove()删除元素,返回 ...

  10. java基础之集合框架--使用ArrayList类动态 存储数据

    一.ArrayList是List接口下的一个实现类,实现了长度可变的.连续的数组:拥有数组的特性. 遵循了LIst的规则:不唯一的.有序的. 如果没有增加泛型的话,集合中可以添加任何类型的数据. 使用 ...

随机推荐

  1. C语言中这么骚的退出程序的方式你知道几个?

    C语言中这么骚的退出程序的方式你知道几个? 前言 在本篇文章当中主要给大家介绍C语言当中一些不常用的特性,比如在main函数之前和之后设置我们想要执行的函数,以及各种花式退出程序的方式. main函数 ...

  2. java集合框架复习----(4)Map、List、set

    文章目录 五.Map集合[重要] 1.hashMap 六.Collections工具类 总结 集合的概念 List集合 set集合: Map集合 Collection 五.Map集合[重要] 特点: ...

  3. Unity破窗游戏制作(简易版)

    Unity破窗游戏制作(简易版) 参考:"对不起,我选择摸鱼"-<扫雷>小游戏开发实战,算法.源代码,基于Unity3D开发 - 掘金 (juejin.cn) 到&qu ...

  4. 7. url反向解析和静态文件

    一.代码中url出现的位置 1.模版[html]中 1.<a href='urk'>超链接点击跳转<a/> 2.<form action='url' method='po ...

  5. Python基础之面向对象:3、继承与派生

    面向对象 一.三大特征之继承 python三大特征: 封装.继承.多态 三者中继承最为核心,实际应用对,感受较为直观 封装和多态略微抽象 1.继承的概念 继承的含义: ​ 在现实生活中,继承表示人与人 ...

  6. RocketMQ 在物流行业的应用与运维

    本文作者:丁威 - 中通快递资深架构师,<RocketMQ技术内幕>作者,Apache RocketMQ社区首席布道师,公众号「中间件兴趣圈」维护者. 01 物流行业的业务特点 物流行业有 ...

  7. 我把 CPU 三级缓存的秘密,藏在这 8 张图里

    本文已收录到  GitHub · AndroidFamily,有 Android 进阶知识体系,欢迎 Star.技术和职场问题,请关注公众号 [彭旭锐] 进 Android 面试交流群. 前言 大家好 ...

  8. 编码工具使用(go语言)

    1.课程介绍 Git基础课程和实操 Goland介绍以及常用快捷键使用 Go delve 调试 你想要的linux 这里都有 2.版本控制工具介绍 原始的版本控制 修改文件,保存文件副本 版本控制的起 ...

  9. Java 中九种 Map 的遍历方式,你一般用的是哪种呢?

    日常工作中 Map 绝对是我们 Java 程序员高频使用的一种数据结构,那 Map 都有哪些遍历方式呢?这篇文章阿粉就带大家看一下,看看你经常使用的是哪一种. 通过 entrySet 来遍历 1.通过 ...

  10. C温故补缺(一):数据类型和基本类型占位

    数据类型 基本类型:就是算术类型,包括整型和实型 枚举类型:一组离散的整数 void类型:无可用值类型 派生类型:指针(*),数组([]),结构体(struct),共用体(union),函数(fun( ...