Java 集合

一.collection(单例集合)

1.什么是集合

存储对象的容器,面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,存储对象,集合是存储对象最常用的一种方式。

集合的出现就是为了持有对象。集合中可以存储任意类型的对象,而且长度可变。在程序中有可能无法预先知道需要多少个对象,那么用数组来装对象的话,长度不好定义,而集合解决了这样的问题。

2.集合和数组的区别

数组和集合类都是容器

数组长度是固定的,集合长度是可变的。数组中可以存储基本数据类型,集合只能存储对象数组中存储数据类型是单一的,集合中可以存储任意类型的对象。

集合类的特点

用于存储对象,长度是可变的,可以存储不同类型的对象。

数组的缺点

存储类型单一的数据容器,操作复杂(数组一旦声明好不可变)

3.集合的分类

集合做什么

1:将对象添加到集合

2:从集合中删除对象

3: 从集合中查找一个对象

4:从集合中修改一个对象就是增删改查

注意:集合和数组中存放的都是对象的引用而非对象本身

Collection是单例集合最基本的集合接口,
Java SDK不提供直接继承自Collection的类,Java SDK提供的类都是继承自Collection的“子接口”如List和Set。


单列集合Collection方法
boolean add(E e) 添加
boolean remove(index i)  移除指定元素
void clear() 清空集合
boolean contains(Object o) 是否包含
boolean isEmpty()   是否是空
int size() 集合长度

带All的功能
         boolean addAll(Collection c)   向集合中添加另一个集合的的元素
         boolean removeAll(Collection c)
         boolean containsAll(Collection c)
         boolean retainAll(Collection c)

1.迭代器的遍历

iterator接口

 booleanhasNext()
          如果仍有元素可以迭代,则返回 true
 Enext()
          返回迭代的下一个元素。
 voidremove()
          从迭代器指向的集合中移除迭代器返回的最后一个元素(可选操作)。


2.List集合
List集合的特有功能概述
    * void add(int index,E element)   向指定索引添加元素
    * E remove(int index)                   删除指定索引元素
List特有的迭代方式ListIterator 在迭代是可以 添加删除
ListIterator<String> iterator = list .listIterator();
ArrayList集合特有的方法
 get(int index)                  获取指定索引元素
 set(int index,E element)  修改指定索引元素
 toArray()                          将集合转换成数组
indexOf(object o)             返回 列表中第一次出现的指定元素的索引,如果列表不包含该元素,则返回 -1
lastIndexOf(object o)      返回列表中最后一次出现的指定元素的索引,如果列表不包含该元素,则返回 -1
subList(int index, int index)  截取集合
注意:
普通for循环,可以删除,但是索引要--
迭代器,可以删除,但是必须使用迭代器自身的remove方法,否则会出现并发修改异常
增强for循环不能删除

阐述ArrayList、Vector、LinkedList的存储性能和特性。
ArrayList 是线程不安全的 是使用数组方式存储数据,通过索引来操作数据,查改快,但是增删慢,因为每一次增加和删除都会重构索引默认初始长度是10,当数据多了,ArrayList容不下时,这时ArrayList会增加长度,会增加自身长度的二分之一,ArrayList会再创建一个更大的数组,然后将之前的数据拷贝到新数组中,这就是ArrayList基于数组实现的可变长度原理。
Vector是线程安全的, 是使用数组方式存储数据,效率低
LinkedList, 是线程不安全的,是使用链表方式存储数据,增删快,查改慢,因为每一个元素都有前一个和后一个元素的标识,可以直接添加和删除
如果遇到多个线程操作同一个容器的场景,则可以通过工具类Collections中的synchronizedList方法将其转换成线程安全的容器后再使用

3.set集合
HashSet, TreeSet,  
LinkedHashSet(可以保证怎么存就怎么取)
去重的原理,是由equals()方法和hashCode()方法,只有当hashCode值一样时,才调用equals方法.做比较
TreeSet,可以用来自然排序,

Set 接口

               Set接口下的元素无序,不可以重复。其下面分为HashSet和TreeSet。
              HashSet
               底层数据结构是哈希表,线程不安全,效率高。
               保证 唯一性 依赖两个方法:hashCode()和equals()。
               顺序:
                       判断hashCode()值是否相同。
                       相同:继续走equals(),看返回值
                                   如果true:就不添加到集合。
                                   如果false:就添加到集合。
                       不同:就添加到集合。
              TreeSet
                底层数据结构是二叉树,线程不安全,效率高。
                  保证元素唯一性 的方法时根据返回值是否是0。
                保证 排序 的两种方式:
                        自然排序(元素具备比较性):实现Comparable接口
                        比较器排序(集合具备比较性):实现Comparator接口



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值