首页 > 编程语言 > 详细

Java集合详解

时间:2019-02-03 15:54:53      阅读:225      评论:0      收藏:0      [点我收藏+]

内容:

1、List相关

2、Set相关

3、Collection总结

4、Map相关

5、Collections介绍

 

 

 

1、List相关

(1)List集合存储数据的结构

List接口下有很多个集合,它们存储元素所采用的结构方式是不同的,这样就导致了这些集合有它们各自的特点,

在不同的环境下进行使用。数据存储的常用结构有:堆栈、队列、数组、链表

堆栈(栈)的特点:

  • 先进后出
  • 栈的入口和出口都是栈的顶端位置
  • 压栈(压入元素)、弹栈(弹出元素)

队列的特点:

  • 先进先出
  • 队列的入口、出口各占一侧

数组的特点:

  • 查找元素快(通过索引,可以快速访问指定位置的元素)
  • 增删元素慢(需要移动元素)

链表的特点:

  • 多个节点之间,通过地址进行连接
  • 查找元素慢:想查找某个元素,需要通过连接的节点,依次向后查找指定元素
  • 增删元素快:只需修改连接下个元素的地址

 

(2)List接口的特点及其实现类

List接口的特点:

  • 有下标
  • 有序的(存和取的顺序一致)
  • 可重复

List接口实现类:ArrayList、LinkedList、Vector

  • ArrayList:底层采用数组结构,查询快,增删慢  =》线程不安全
  • LinkedList:底层采用链表结构,查询慢,增删快  =》线程不安全
  • Vector:底层采用数组结构,查询快,增删慢  =》线程安全

List接口的方法:

  • 增:add(E e)  add(int index, E e)
  • 删:remove(Object obj) remove(int index)
  • 改:set(int index, E e)
  • 查:get(int index)
  • 其他方法:size()、clear()、contains(Object obj)、toArray()、iterator()、isEmpty()

实现类中的方法:

  • ArrayList:方法基本和List中定义的一模一样
  • LinkedList:除了和List接口中一样的方法之外,还有一些特有的方法

 

(3)LinkedList集合

LinkedList集合数据存储的结构是链表结构。方便元素添加、删除的集合。实际开发中对一个集合元素的添加与删除

经常涉及到首尾操作,而LinkedList提供了大量首尾操作的方法。如下图

技术分享图片

LinkedList是List的子类,List中的方法LinkedList都是可以使用,这里就不做详细介绍,我们只需要了解LinkedList的特有方法即可。

在开发时,LinkedList集合也可以作为堆栈,队列的结构使用

使用实例:

 1 public class useLinkedList {
 2     public static void main(String[] args) {
 3         LinkedList<String> link = new LinkedList<String>();
 4         // 添加元素
 5         link.addFirst("abc1");
 6         link.addFirst("abc2");
 7         link.addFirst("abc3");
 8         // 获取元素
 9         System.out.println(link.getFirst());    // abc3
10         System.out.println(link.getLast());        // abc1
11         // 删除元素
12         System.out.println(link.removeFirst());    // abc3
13         System.out.println(link.removeLast());    // abc1
14 
15         while (!link.isEmpty()) { // 判断集合是否为空
16             System.out.println(link.pop()); // 弹出集合中的栈顶元素
17             // abc2
18         }
19     }
20 }

 

 

2、Set相关

(1)Set接口的特点及其实现类

Set接口的特点:

  • 无下标
  • 无序的(无序是指存和取的顺序不一定一致,LinkedHashSet和TreeSet除外)
  • 不可重复

Set接口实现类:HashSet、LinkedHashSet、TreeSet

  • HashSet:底层采用哈希表结构,查询快,增删快,无序的
  • LinkedHashSet:底层采用链表+哈希表结构,查询快,增删快,有序的 
  • TreeSet:底层采用红黑树结构,查询快,增删快, 有序的 

Set接口的方法:没有特有方法,基本和父接口Collection类一模一样

实现类中的方法:实现类中的方法基本和Set一模一样

 

(2)哈希相关

对象的哈希值:任何对象都有一个哈希值,哈希值是对象的一个数字表示  

对象的字符串表示:toString方法,默认表示格式:包名.类名@地址值(这里的地址值实际上是哈希值的16进制)

如何获取对象的哈希值 =》hashCode方法

什么是哈希表:

哈希表底层使用的也是数组机制,数组中也存放对象,而这些对象往数组中存放时的位置比较特殊,当需要把这些

对象给数组中存放时,那么会根据这些对象的特有数据结合相应的算法,计算出这个对象在数组中的位置,然后把

这个对象存放在数组中。而这样的数组就称为哈希数组,即就是哈希表

hashCode方法和equals方法:

当向哈希表中存放元素时,需要根据元素的特有数据结合相应的算法,这个算法其实就是Object类中的hashCode方法。

由于任何对象都是Object类的子类,所以任何对象有拥有这个方法。即就是在给哈希表中存放对象时,会调用对象的hashCode方法,

算出对象在表中的存放位置,这里需要注意,如果两个对象hashCode方法算出结果一样,这样现象称为哈希冲突,这时会调用对象

的equals方法,比较这两个对象是不是同一个对象,如果equals方法返回的是true,那么就不会把第二个对象存放在哈希表中,如果

返回的是false,就会把这个值存放在哈希表中。

注意:String类重写了hashCode方法,按照自己的方式计算,”abc”和”acD”哈希值相同

总结:保证HashSet集合元素的唯一,其实就是根据对象的hashCode和equals方法来决定的。如果我们往集合中存放自定义的对象,

那么保证其唯一,就必须复写hashCode和equals方法建立属于当前对象的比较方式。

 

(3)Set使用实例

 

 

3、Collection总结

(1)Collection

Collection分类:

  • List 可以存储重复元素,有序的(元素存取顺序),有索引  =》ArrayList、LinkedList
  • Set 不能存储重复元素,无序的(元素存取顺序,LinkedHashSet是有序的),无索引 =》HashSet、LinkedHashSet

Collection方法:

  • boolean add(Object e)         把给定的对象添加到当前集合中
  • void clear()                           清空集合中所有的元素
  • boolean remove(Object o)   把给定的对象在当前集合中删除
  • boolean contains(Object o)   判断当前集合中是否包含给定的对象
  • boolean isEmpty()                判断当前集合是否为空
  • Iterator iterator()                   迭代器,用来遍历集合中的元素的
  • int size()                                返回集合中元素的个数
  • Object[] toArray()                  把集合中的元素,存储到数组中
  • Iterator :                                     迭代器
  • Object next()                        返回迭代的下一个元素
  • boolean hasNext()               如果仍有元素可以迭代,则返回 true。

 

(2)List和Set

List与Set集合的区别:

  • List是一个有序的集合(元素存与取的顺序相同),可以存储重复的元素                       
  • Set是一个无序的集合(元素存与取的顺序可能不同),不能存储重复的元素

List集合中的特有方法(下标):

  • void add(int index, Object element) 将指定的元素,添加到该集合中的指定位置上
  • Object get(int index)返回集合中指定位置的元素
  • Object remove(int index) 移除列表中指定位置的元素, 返回的是被移除的元素
  • Object set(int index, Object element)用指定元素替换集合中指定位置的元素,返回值的更新前的元素

 

List和Set的实现类:

ArrayList:

        底层数据结构是数组,查询快,增删慢

        线程不安全,效率高

LinkedList:

        底层数据结构是链表,查询慢,增删快

        线程不安全,效率高

Vector:

        底层数据结构是数组,查询快,增删慢

        线程安全,效率不高

HashSet:

        元素唯一不能重复

        底层结构是 哈希表结构

        元素的存与取的顺序不能保证一致

LinkedHashSet:

        元素唯一不能重复

        底层结构是 链表结构+哈希表结构

       元素的存与取的顺序一致

 

如何保证元素的唯一的:重写hashCode() 与 equals()方法

 

Java集合详解

原文:https://www.cnblogs.com/wyb666/p/10350444.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!