黑马程序员技术交流社区

标题: 单列集合 [打印本页]

作者: overtheall    时间: 2019-3-30 13:16
标题: 单列集合
单列集合
数组和集合的区别                        
数组的长度是固定的,集合的长度是可变的
数组既可以存储基本数据类型、也可以存储引用数据类型。集合只能存储引用数据类型
单列集合:每次只能存储一个元素
Collection接口是单列集合的最底层(父)接口,定义是所有单列集合中共性的方法、所有的单列集合(所有的子类)都可以使用共性的方法,里面没有带索引的方法
顶层接口/抽象类中的共性的方法,所有的子类都可以使用
底层接口/抽象类,无法创建对象使用,需要使用子类创建对象使用
Collection中的共性方法:
public boolean add(E e):  把给定的对象添加到当前集合中 。
public void clear() :清空集合中所有的元素。
public boolean remove(E e): 把给定的对象在当前集合中删除。
public boolean contains(E e): 判断当前集合中是否包含给定的对象。
public boolean isEmpty(): 判断当前集合是否为空。
public int size(): 返回集合中元素的个数。
public Object[] toArray(): 把集合中的元素,存储到数组中。
List接口extends(继承)Collection接口,是Collection的子接口(有序可重复)
1. 是有序的集合(存储和取出的元素顺序相同)
2. 允许存储重复的元素
3. 有索引,可以使用普通的for循环,迭代器,增强for循环
List中特有的方法
public void add(int index, E element): 将指定的元素,添加到该集合中的指定位置上。
public E get(int index):返回集合中指定位置的元素。
public E remove(int index): 移除列表中指定位置的元素, 返回的是被移除的元素。
public E set(int index, E element):用指定元素替换集合中指定位置的元素,返回值的更新前的元素。
ArrayList集合是List接口的实现类(implement
注意:线程不安全,效率低
底层是数组结构实现的,查询快增删慢
格式:ArrayList<String> list = new ArrayList<String>();
JDK 7,右侧泛型的尖括号之内可以留空,但是<>仍然要写。简化格式:
ArrayList<String> list = new ArrayList<>();
常用方法:
public boolean add(E e) : 将指定的元素添加到此集合的尾部
public E remove(int index) :移除此集合中指定位置上的元素。返回被删除的元素。
public E get(int index) :返回此集合中指定位置上的元素。返回获取的元素。
public int size() :返回此集合中的元素数。遍历集合时,可以控制索引范围,防止越界。
存储基本数据类型
ArrayList对象不能存储基本类型,只能存储引用类型的数据。类似 <int> 不能写,但是存储基本数据类型对应的
包装类型是可以的。所以,想要存储基本类型数据, <> 中的数据类型,必须转换后才能编写,只有 Integer Character 需要特殊记忆,其他基本类型只是首字母大写即可。
LinkedList集合是List接口的实现类(implement
注意:线程不安全,效率高
底层是链表结构实现的,查询慢增删快
注意:使用LinkedList集合特有的方法,不能使用多态
(添加元素方法)
public void addFirst(E e):将指定元素插入此列表的开头。等效于pushE e
public void addLast(E e):将指定元素添加到此列表的结尾。等效于add()
public void push(E e):将元素推入此列表所表示的堆栈。
(获取元素方法)
public E getFirst():返回此列表的第一个元素。
public E getLast():返回此列表的最后一个元素。
(移除元素方法)
public E removeFirst():移除并返回此列表的第一个元素。
public E removeLast():移除并返回此列表的最后一个元素。
public E pop():从此列表所表示的堆栈处弹出一个元素。等效于removeFirst()
public boolean isEmpty():如果列表不包含元素,则返回true
Vector集合List接口的实现类(implement
底层数据结构是数组,查询快,增删慢。
线程安全,效率低
ArrayListLinkedListVector有什么区别?
相同点:ArrayListVector底层都是数组实现的。
不同点:ArrayListLinkedList都是线程不安全的。速度快、数据不安全!JDK1.2版本出现
Vector是线程安全的。速度慢、数据安全!JDK1.0版本出现
Set接口extends(继承)Collection接口,是Collection的子接口(无序唯一)
1. 不允许存储重复的元素
2. 没有索引,不能使用普通的for循环遍历 只能使用迭代器或者增强for
3. 没有自己特有的方法,基本与 Collection接口中的方法一致
Set集合保证元素唯一性原理
根据元素的哈希值来确定该元素所保存的位置
如果哈希值不同,直接存储
如果哈希值相同,继续比较equals()方法
返回true 不存储
返回false 直接存储
Hashset集合是Set的接口的实现类(implement
1无序集合(存储的元素和取出的元素顺序有可能不一致)
2底层是哈希表+红黑树结构(查询速度非常快)(无序唯一)
3 不允许存储重复元素
4 没有索引,没有带索引的方法,不能用普通的遍历方法
如何来保证元素唯一性?
1.依赖两个方法:hashCode()equals()
HashSet集合存储数据的结构(哈希表)
Jdk8之前 哈希表=数组+链表
Jdk8之后:哈希表= 数组+链表   哈希表= 数组+红黑树
哈希表的特点:速度快
哈希值:是一个十进制的整数,由系统随机给出(就是对象的地址值,是一个逻辑地址,是模拟出得到地址,不是数据实际存储的物理地址)在Object类有一个方法,可以获取对象的哈希值
Int hashCode() 返回该对象的哈希码值
hashCode方法的源码
Public native int hashCode()
Native;代表该方法调用的是本地操作系统的方法
String类哈希值
String重写了Object类的hashCode方法
HashSet存储自定义类型元素
HashSet中存放自定义类型元素时,需要重写对象中的hashCodeequals方法,建立自己的比较方式,才能保证HashSet集合中的对象唯一
TreeSet集合是Set的接口的实现类(implement
1.是有序集合
2.不允许元素重复
LinkedHashSet集合是Set的接口的实现类(implement)有序的集合
底层是哈希表+链表双结构,可以保证元素的存储顺序  
1.由链表保证元素有序
2.由哈希表保证元素唯一

集合的遍历方法:
1Iterator迭代器::迭代输出,是使用最多的输出方式。      
Iterator  it=list.iterator();//创建迭代器对象
while(it.hasNext()){//循环遍历
   }
2. for循环
for(int i=0;i<list.size();i++){
                }
3.增强for   for(int x  :  a){   }   
简单介绍一下增强for
增强for
格式:
for(数组或集合的类型 变量名: 数组或集合名){
          直接用变量名
      }
好处:简化了数组和集合的遍历






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2