集合——对象的容器

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

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. 一天五道Java面试题----第九天(简述MySQL中索引类型对数据库的性能的影响--------->缓存雪崩、缓存穿透、缓存击穿)

    这里是参考B站上的大佬做的面试题笔记.大家也可以去看视频讲解!!! 文章目录 1.简述MySQL中索引类型对数据库的性能的影响 2.RDB和AOF机制 3.Redis的过期键的删除策略 4.Redis ...

  2. 齐博x1标签之异步加载标签数据

    为什么要异步加载标签?他有什么好处 如果一个页面的标签太多,又或者是页面中某一个标签调用数据太慢的话,就会拖慢整个页面的打开,非常影响用户体验.这个时候,用异步加载的话,就可以一块一块的显示,用户体验 ...

  3. day52-正则表达式03

    正则表达式03 5.6正则表达式三个常用类 java.util.regex 包主要包括以下三个类:Pattern类.Matcher类和PatternSyntaxException类 Pattern类 ...

  4. 19_Vue如何监测到对象类型数据发生改变的?

    数据更新 关于监视 我们之前讲过,我们在data当中配置的属性,最终会挂载在vue实例身上,而data这个配置项,最终也会在vue身上成为一个新的属性 == _data 当我们在页面DOM当中,去使用 ...

  5. 修改服务器ssh端口

    最近,访问公司虚拟机都需要通过堡垒机才能访问了,觉得麻烦.要想不受该规则限制,也有办法,可以通过修改虚拟机ssh端口解决. 下面做个介绍. 1. 通过堡垒机登录虚拟机 2. 修改虚拟机ssh端口 编辑 ...

  6. perl使用print输入数据到文件

    #!usr/bin/perl use utf8; #引入utf8模块 脚本内的字符串使用utf8作为编码格式 binmode(STDOUT,":encoding(gbk)"); # ...

  7. Installing ClickHouse-22.10.2.11 on openEuler

    一.Installing ClickHouse-22.10.2.11 on openEuler 1 地址 https://clickhouse.com https://packages.clickho ...

  8. xshell登陆,查看中文日志出现乱码

    看到乱码,首先想到的是编码问题 linux默认编码格式是utf-8,windows默认gbk [root@backup]# echo $LANGen.US.UTF-8 使用fie命令可以查看到文件信息 ...

  9. Kubernetes 1.25.4数据平面自带nginx负载均衡实现高可用

    1.环境准备 要点: 1.使用一个FQDN统一作为API Server的接入点: 2.加入集群之前,每个节点都将该FQDN解析至第一个Master: 3.加入集群之后,每个Master节点将该FQDN ...

  10. 喜欢用Map却从未遭遇内存泄露的Java程序员上辈子都是神仙

    前言 点进来这篇文章的大概有两种人,一种是喜欢用Map的想看看自己是不是有可能也会踩雷,一种是不喜欢用Map的想进来看看那些喜欢用的人是怎么踩雷的. 那你要失望了,我只是单纯把公司最近代码审查时一个关 ...