java--集合相关

 

数组工具类  Arrays  

Arrays .sort 排序方法(底层是一个性能优于冒泡排序的算法)

Arrays .binarySearch二分查找方法

Arrays .asList(1,2,3...) 接受一个可变参数生成一个list集合

集合的长度是可变的,集合本身是一个存储容器,集合的存、取,集合自己的本身特性
集合类的顶级接口  Collection<E> 、Map两个派系


一、Collection<E>

下面挨个探讨一下Collection接口中的基本方法:

1、添加方法:

    方法a:  boolean add(object e);  一次添加一个元素

    方法b: boolean addAll(Collection c);   将一个参数容器中的元素添加到当前容器中

2、删除方法:

      方法a:  boolean remove(object e);   删除一个遇到的指定对象

      方法b: boolean removeAll(Collection c);删除指定的Collection中和本Collection中相同的元素

      方法c:void clear();直接将集合中的元素清空

3、判断方法:

   方法a: boolean contains(object e);  是否包含指定元素

   方法b:boolean containsAll(Collection c); 是否包含指定容器中的元素

   方法c:Boolean isEmpty();  判断是否有元素

4、获取元素个数的方法:

   int size(); 获取元素的个数

5、取交集的方法:

 

   Boolean retainAll(Collection c);保留和指定collection集合中相同的元素,不相同的元素会被删除

Collection下的List接口

List 里面的允许存取重复元素,有序的集合(存进去1,2,3取出来也是1,2,3) ,有索引(带有索引的操作要防止下标越界)
set  里面不允许存取重复元素,无序集合
两个派系: 1)List接口实现类:   1.ArrayList类 2.LinkedList

List接口中的特有方法:  add(int index ,xx);将制定元素插入到制定索引

                                     get(int index,xx);传一个索引给指定索引的值

                                     remove(int index);删除指定索引上的元素,返回被删除之前的元素!

                                     set(int index ,xx):修改指定元素,返回修改之前的元素!

                                    当迭代器操作集合,不允许操作集合的长度!不允许进行增、删操作!

List存储数据结构:

1.堆栈:在内存中开辟堆栈空间,先进后出

2.队列:先进先出

3数组:查找速度快,可以快速访问指定位置的元素(内存地址也是连续的),增删慢,破坏原有的结构(增删的时候创建新数组再把数据添加到指定位置)

4.链表(对各节点之间通过地址记录链接内有内存上的关系)查找速度慢:内存地址不是连续的

增删速度快:不需要破坏原来的结构

1)List集合:

  1.ArrayList 2.LinkedList

  1.ArrayList 实现类 

 可以存引用类型,本身是一个可变数组,父类List,Collection的实现类

  此实现是不同步的, 线程是不安全的,运行速度特别快,允许存储null值

 2. LinkedList 实现类

  父类List,Collection的实现类 底层 链表结构实现查询慢,增删快(不需要动列表结构)  此实现是不同步的, 线程是不安全的,允许存储null值

Vector 集合:存储结构是数组实现了List接口,是线程安全的集合,运行速度慢!

 2)Set接口

   set集合是没有索引的,不允许存储重复元素Set接口和Collection接口方法一样

    1.HashSet  2.LinkedHashSet   

   1.HashSet实现类:

    实现set接口有哈希表(实际是HashMap实例)无序集合(存储和取出的顺序不同,不存储重复元素),可以存null元素

    底层结构:哈希表(链表数组结合体每个数组都没有索引)  特点:存储取出都特别快,线程不安全,运行速度比较快;

    存数据的时候把对象地址存取在数组中,下一对象可能会放到上一个元素下面形成一个链表结构,也可能直接存到数组当中

     底层还会根据元素的大小自动进行扩容;

    存储数据的时候,会先调用对象的哈希值,拿到哈希值会在容器中搜索有没有一样的哈希值,如果没有这个对象就存道数组中,            如 果有相同的哈希值,集合会让后来方法调用equals方法与哈希值一样的对象比较,结果如果是true,则元素重复后来的对象就存      不进去;结果如果是false(两个对象的哈希值相同,equals对比为false),就会采用桶的存储方式存储到对象后面让前一个对象记住      自己的地址

LinkedHashSet实现类;

基于双向链表的哈希表实现,保证迭代的顺序线程不安全集合;

添加:

ArrayList 可以使用contains方法判断元素是否存在;

HashSet 可以使用add()方法返回值判断,也可已使用contains方法判断;

重写HashCode和equals方法是保证数据的唯一性:

 

二、Map<k,v>

Map集合(双列集合:映射关系的键值对):

       HashMap<K,V>

           不允许出现重复的key键,可以允许相同的值出现,线程不安全集合,运行速度快, HashMap允许存储Null值,null键

           常用方法:  将键值对k,v存储到集合当中  put(key,vule);Key作为键的对象,Vule作为值得对象

           键的对象为字符串可以保证唯一性

        LinkedHashMap

              继承HashMap 保证迭代顺序(有序的)也是线程不安全

       HashTable底层数据结构是哈希表,特点和HashTable线程安全集合运行速度慢

           HashTable不允许存储Null值,null键

     

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值