算法篇(前序)——Java的集合

 菜鸟拙见,望请纠正:附上JDK参考文档:链接:https://pan.baidu.com/s/1eLqG4eTXYSTY1-IxMQqA4Q 密码:33x0   以及算法篇全文链接  https://www.cnblogs.com/nullering/p/9536339.html

一:前言

  说完了数据结构的基础认知,我想扯一个外传——Java的集合。Java的集合只是一些能够盛放对象的容器,而这些容器的实现,则是用了不同的数据结构,我们在使用Java语言时,这些集合类就是我们最好的工具。

  如图所示,这是Java的集合的抽象类和具体的实现类,抽象接口类不能实例化,必须由具体实现类进行实例化操作。

 

二:List接口及其实现类ArrayList

 List是元素有序并且可以重复的集合,被称为序列

List可以精确的控制每个元素的插入位置,或删除某个位置元素

基本操作:

(1)、添加

void add(int Index , E element):在list的指定位置插入元素

void addAll(int index , Collection<? Extends E> e):将指定collection中的所有元素插入到列表中的指定位置

(2)、删除

E  remove(int Index):删除指定位置的元素,并返回该元素;

(3)、修改

E  set(int index , E element):替换指定位置的元素,并返回被替换的元素

(4)、获取

Int  indexOf(Object o):返回指定元素第一次出现的索引,如果该list中不含则返回-1;

E   get(int Index):返回指定位置的元素;

List<E> sublist(int fromIndex , int toIndex):返回列表指定的fromIndex(包括)和toIndex(不包括)之间的部分视图(list);

实现类ArrayList(常用)

ArrayList——数组序列,是List的一个重要实现类

ArrayList底层是由数组实现的,可以动态增加容量

具体操作参考JDK参考文档

 

实现类LinkedList

LinkedList是基于链表实现的,是一个双向循环列表。不是线程安全的。

具体操作参考JDK参考文档

 

三:Set接口及其实现类

  

  集合Set是Collection的子接口,Set不允许其数据元素重复出现,也就是说在Set中每一个数据元素都是唯一的。

虽然集合号称存储的是 Java 对象,但实际上并不会真正将 Java 对象放入 Set 集合中,只是在 Set 集合中保留这些对象的引用而言。也就是说:Java 集合实际上是多个引用变量所组成的集合,这些引用变量指向实际的 Java 对象。

基本操作:

实现类HashSet(常用)

  HashSet通过Hash算法排布集合内的元素,所谓的Hash算法就是把任意长度的输入(又叫做预映射),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射。对于不同类型的信息,其散列值公式亦不完全相同。  

  当我们使用HashSet存储自定义类时,需要在自定义类中重写equals和hashCode方法,主要原因是集合内不允许有重复的数据元素,在集合校验元素的有效性时(数据元素不可重复),需要调用equals和hashCode验证。

具体方法请参考说明文档

 

实现类TreeSet

   TreeSet可以确保集合元素处于排序状态。TreeSet采用红黑树的数据结构来存储集合元素。

  TreeSet会调用集合元素的compareTo(Object o)方法来比较元素之间的大小关系,然后将集合元素按升序排列,这种方式是自然排序。 
Java提供了一个Comparable接口,该接口定义一个compareTo(Object o)方法,该方法返回一个整数值,实现该接口的类必须实现该方法,实现该接口的类的对象就可以比较大小。当一个对象调用该方法与另一个对象进行比较时,例如:obj1.compareTo(obj2),如果该方法返回0,则代表这两个对象相等;如果该方法返回一个正整数,则表明obj1大于obj2;如果该方法返回一个负整数,则表明obj1小于obj2。

1     @Override 2     public int compare(People o1, People o2) { 3         //先按年龄比较,如果年龄相等,则按姓名4         if(o1.getAge()==o2.getAge()) 
                        
关键字:
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信