JAVA通幽(二)容器类

版权声明:程序猴jwang版权所有 https://blog.csdn.net/qq_21046965/article/details/83066319

前言

       本章将讲解集合的基本概念

基础

1.数组的优劣

优势:是一种简单的线性序列,可以快速的访问数组元素,效率高。如果从效率和类型检查的角度讲,数组是最好的。

劣势:不灵活。数组的容量需要事先定义好,无法随着需求的变化而扩容。

2.容器类

综上所述,我们需要一个更为强大的容器来存储所需要的数据对象集合,基本容器类如下所示:

 为了更好的学习容器,这里先行说一下泛型的概念:

泛型是jdk1.5之后新增加的特性,它可以帮助我们建立类型安全的集合,在使用了泛型的集合中,遍历无需进行强制转换,泛型简单的理解就是标记本集合存放的数据类型。如 LIst<String> list = new ArrayList<String>();定义集合中<String>就是一个泛型,它告诉编译器,我声明的LIst集合存放的是String类型的对象。

3.Collection容器类的常用方法(ArrayList为例)

Collection集合的接口有两个子接口(List和Set),基本方法大致相同,这里我们以List的一个实现类:ArrayList进行讲解

  • public boolean add(E e):表示向集合中按顺序添加元素
  • public void add(int index,E element):表示向集合指定索引处插入元素,使用该方法注意数组越界(0=<index<=集合长度)
  • public boolean addAll(Collection<? extends E> c):表示向集合中添加另外一个集合,需注意类型一致或继承关系
  • public boolean addAll(int index,Collection<? extends E> c):表示向集合指定索引处中添加另外一个集合,注意数组越界

  • public void clear():表示清空该集合,移除所有元素。

  • public boolean contains(Object o):判断集合中是否包含某个元素,底层需元素对象的equals方法支持

  • public int indexOf(Object o):从前往后判断对象在集合中的索引位置,底层需元素对象equals方法支持
  • public int lastIndexOf(Object o):从后往前判断对象在集合中的索引位置,底层需元素对象equals方法支持

  •  public E get(int index):表示从集合中获取指定索引的元素,注意数组越界;该方法Set实现类中没有

  • public E set(int index,E element):替换某个下标位置的元素值

  • public boolean isEmpty():判断集合是否为空,即size()为0
  • public int size():返回集合的长度值

 

  • public E remove(int index):表示从集合中移除某个索引下的元素
  • public boolean remove(Object o):表示从集合中移除某个元素

4.Map容器类的常用方法(HashMap为例) 

Map集合,存储的是键值对,即key:value的形式如{1=aa, 2=bb},这里我们以Map的一个实现类:HashMap进行讲解

  • public V put(K key,V value):用于向Map集合中加入元素,以key-value形式存储

  • public V get(Object key):获取Map集合中指定key的value值

  • public Set<K> keySet():用于获取Map集合中的key值集合,该集合为Set类型

  •  public Set<Map.Entry<K,V>> entrySet():获取Map对象的键值对集合,该集合为Set类型

有兴趣的同学可以学习一下这些容器类的底层原理,对日后的工作和学习还是蛮有帮助的。这个我有时间也会在这里更新!!

要点:

1.List和Set的区别

  • Set其中的值不允许重复,无序的数据结构
  • List其中的值允许重复,因为其为有序的数据结构

2.ArrayList和LinkedList的区别

  • ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构
  • 对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针
  • 对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据

3.HashSet和TreeSet的区别 

  • TreeSet 是二差树实现的,Treeset中的数据是自动排好序的,不允许放入null值。 
  • HashSet 是哈希表实现的,HashSet中的数据是无序的,可以放入null,但只能放入一个null,两者中的值都不能重复,就如数据库中唯一约束。 
  • HashSet要求放入的对象必须实现HashCode()方法,放入的对象,是以hashcode码作为标识的,而具有相同内容的 String对象,hashcode是一样,所以放入的内容不能重复。但是同一个类的对象可以放入不同的实例 。

4.HashMap和Hashtable的区别

  • HashMap中键值 允许为空 并且是非同步的
  • Hashtable中键值 不允许为空 是同步的
  • 继承不同,但都实现了Map接口

猜你喜欢

转载自blog.csdn.net/qq_21046965/article/details/83066319