栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

集合 java

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

集合 java

集合类体系结构

java.util 包中的集合类就像一个装有多少个对象的容器,提到容器就不难想到数组,集合与的数组不同之处在于:

  • 数组:长度固定,可以存储基本数据类型,也可以存储对象
  • 集合:长度可变,只能存储对象类型(由于有包装类的存在,集合可以储存任何类型),集合给我们提供了丰富的API,功能更强大
一、Collection

1.什么是Collection

  • 是单例集合的顶级接口,他表示一组对象,这些对象也称为Collection的元素
  • JDK不提供此接口的任何实现类,他提供更具体的子接口(如Set和List)实现

2.怎么创建
由于Collection是接口,不能直接被实例化,所以我们采用多态方式创建
列如:

Collection con=new ArrayList<>();
                                      //ArrayList是Collection的实现类

3.Collection常用方法

//添加方法
1. boolean add(E e) 
   确保此集合包含指定的元素(可选操作) 
   
2.boolean addAll(Collection c) 
   将指定集合中的所有元素添加到此集合(可选操作)
   
(Collection 解释:
·实现了Collection
·类型一定是E的子类
·符号解释:?通配符)

//删除方法
1.void clear() 
从此集合中删除所有元素(可选操作)

2.boolean remove(Object o) 
  从该集合中删除指定元素的单个实例(如果存在)(可选操作)  
  
3.boolean removeAll(Collection c) 
  删除指定集合中包含的所有此集合的元素(可选操作)

//判断
1.boolean isEmpty() 
  如果此集合不包含元素,则返回 true 
  
2.boolean contains(Object o) 
   如果此集合包含指定的元素,则返回 true 
   
3.boolean containsAll(Collection c) 
  如果此集合包含指定 集合中的所有元素,则返回true 

//数组转换
 Object[] toArray() 
 返回一个包含此集合中所有元素的数组 

4.Collection集合的遍历(迭代器)

Iterator(迭代器):

Iterator iterator() 
                    返回此集合中的元素的迭代器,通过集合的iterator()方法得到的,依赖于集合而存在 

Iterator迭代器作用:遍历集合

常用方法:

1.boolean hasNext() 
如果迭代具有更多元素,则返回 true
  
2.E next() 
返回迭代中的下一个元素 

例题:


//创建Collection集合,并且规定泛型为String类型
Colletion con=new ArrayList<>();
//向集合中添加元素
con.add("张三");
con.add("李四");
con.add("王五");
//进行集合遍历
   //返回此集合中的元素的迭代器,通过集合的iterator()方法得到的
Iterator iterator = con.iterator();
        //用while循环遍历,判断是否有下一个元素
        while (iterator.hasNext()){
        //如果有元素,则通过next()方法获取下一个元素
            String next = iterator.next();
            System.out.println(next);


遍历集合的三种方式



public class IteratorTest {
    public static void main(String[] args) {

        ArrayList str = new ArrayList<>();
        str.add("jj");
        str.add("hh");
        str.add("ll");

        //迭代器遍历
//        Iterator iterator = str.iterator();
//        while (iterator.hasNext()){
//            String next = iterator.next();
//            System.out.println(next);

         //for循环遍历
//            for (int i = 0; i < str.size(); i++) {
//                String s = str.get(i);
//                System.out.println(s);
//            }

         //增强for循环
         for (String s1:str){
             System.out.println(s1);
         }
        }
    }
//}

二、List集合(底层是数组)

1.List集合概述

  • 有序集合(也称为序列),用户可以精确控制列表中每个元素的插入位置,用户可以通过整数索引访问元素,并搜索列表中的元素
  • 与Set集合不同,列表通常允许重复的元素

2.List集合的特点

  • 有序:储存和取出的元素一致
  • 可重复:储存的元素可以重复

3.List集合特有方法

1.E get(int index) 
  返回此列表中指定位置的元素 
2.E set(int index, E element) 
  用指定的元素(可选操作)替换此列表中指定位置的元素 
3.void add(int index, E element) 
  将指定的元素插入此列表中的指定位置(可选操作)
4.boolean removeAll(Collection c) 
  从此列表中删除包含在指定集合中的所有元素(可选操作)
......  

4.List迭代器

  • ListIterator迭代器是接口,继承于Iterator接口


ListIterator迭代器常用方法
新增了倒数遍历方法(但是不常用):

  • boolean hasPrevious() 返回 true如果遍历反向列表,列表迭代器有多个元素
  • E previous() 返回列表中的上一个元素,并向后移动光标位置


例题

//创建一个list的集合    
List list = new ArrayList();    
//向末尾添加元素    
list.add("吴用"); //0    
list.add("刘唐"); //1    
list.add("宋江"); //2    
System.out.println(list);    
//我们在1处的索引位置来插入元素,我们插入一个元素的话,改索引后面的元素都会向后移动一位    
list.add(1, "晁盖");    
System.out.println(list);    
//创建一个集合    
List list1 = new ArrayList();    
list1.add("阮小五");    
list1.add("阮小二");    
list1.add("阮小⑦");    
list.addAll(list1);    
System.out.println(list);

//通过ListIterator的方式遍历
ListIterator listIterator = list.listIterator();while(listIterator.hasNext()){    
//获得迭代的元素    
String str = (String) listIterator.next();    
if("刘唐".equals(str)){        
    //我们不能在一边遍历的时候一边操作集合,这样有多线程的并发问题        
    //list.add("白胜");        
    //迭代器可以给我们提供了一个add方法让我们避免并发问题,但是添加的时候本次遍历不生效        
listIterator.add("白胜");   
}    
System.out.println(str);}System.out.println(list);

ArrayList(是接口List的实现类)

1.ArrayList 特点

  • ArrayList中的元素可以重复
  • 是有序的集合,长度可以改变,不固定
  • 线程不安全(线程并发异常ConcurrentModificationException),效率性能高
  • ArrayList 的底层是数组的原理,查询快,增删慢
  • 默认初始化容量是10

2.长度变化

  • ArrayList 在添加数据的时候初始的长度是10,后续会以5个长度来扩充集合的长度
linkedList(是接口List的实现类)

1.特点

  • 也是线程不安全的
  • 底层结构是链表原理,查询慢,增删快
  • linkedList中的元素可以重复
  • 是有序的集合,长度可以改变,不固定
  • 默认初始化容量是0

    2.特有方法
Vector(是接口List的实现类)

1.特点

  • 线程安全,性能底
  • 底层结构是数组
  • 可以改变长度,默认初始化容量10

ArrayList 和 linkedList 的区别:
1.ArratList 底层结构是数组,linkedList 底层结构是链表,他们的特性也是由其数据结构决定的

2.ArrayList 的初始化时默认10容量,linkedList 初始化时默认0容量

3.对于随机访问 get() 和 set() 方法,ArrayList(查询块,增删慢)要优于linkedList

4.对于添加 add() 和 删除 remove() 方法,linkedList(查询慢,增删快)优于ArrayList

ArrayList 和 Aector 的区别
1.线程安全:
Vector使用了Synchronized 来实现线程同步, 是线程安全
的,而ArrayList 是非线程安全的。

2.性能:
ArrayList在性能方面要优于Vector。

3.扩容:
ArrayList和Vector都会根据实际的需要动态的调整容量,只不
过在Vector扩容每次会增加1倍,而ArrayList只会增加50%。

三、Set集合

1.Set集合的概述和特点

  • 不包含重复元素
  • 没有带索引的方法,所以不能用for循环,可以使用for增强和迭代器
  • 无序集合,对集合顺序不做保证

2.创建方法

Set set=new HashSet();
                            //HashSet是Set接口的实现类

3.常用方法
都是继承Collection的方法,一样

HashSet(是Set接口的实现类)

1.HashSet 的特点

  • 底层数据结构是哈希表
  • 无序的集合,元素储存顺序和取出顺序不一致
  • 线程不安全,性能高
  • 是由HashMap支持的,HashSet集合,索引功能都是由HashMap提供,默认初始容量是16

2.什么是哈希值:

哈希值是JDK根据对象的地址或者字符串或者数字算出来的int类型的数值
获取方法
Object 类中有一个方法可以获取对象的哈希值

  • public int 话说hashCode() 返回对象的哈希值码

对象哈希值的特点

  • 同一个对象多次调用hashCode()方法返回的哈希值是相同的
  • 默认情况下,不同对象的哈希值是不同的,而且重写hashCode()方法,可以实现让不同对象的哈希值相同

3.HashSet 集合保证元素唯一性源码分析

linkedList集合(是Set集合的实现类)

linkedList集合的概述和特点

  • 哈希表和链表实现的 Set 接口,具有可预测的迭代次序
  • 由链表保证元素有序,也就是说元素的存储和取出顺序是一致的
  • 由哈希表保证元素统一,也就是说没有重复的元素
  • 初始容量是16
TreeSet集合(间接实现Set接口)

1.特点

  • 元素有序,这里的顺序指的不是存储和取出的顺序,而是按照一定的规则进行排序,具体排序方式取决于构造方法
    TreeSet(): 根据其元素的自然排序进行排序
    TreeSet(Comparator comparator): 根据指定的比较器进行排序
  • 没有带索引的方法,所以不能使用for循环遍历
  • 由于是Set集合,所以不包含重复元素的集合

2.自然排序 Comparable 的用法

例子:

先创建一个Student类


再写一个测试类

总结:

  • 用 TreeSet 集合储存自定义对象,无参构造方法使用的是自然排序对元素进行排序的
  • 自然排序,就是让元素所属的实现类实现Comparable接口,重写compareTo(To) 方法
  • 重写方法时,一定要注意排序规则必须按照要求的主要条件和条件来写

3.比较器排序 Comparator 的使用
例题可以参照 自然排序写

4.增加的方法

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/345897.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号