黑马程序员-集合(一)

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

引用:java.util.Collection

为什么要出现集合:

Java是纯面向对象语言,而面向对象语言对事物的体现就是以对象的形式存在的。因此我们想对对象进行操作,就要对对象进行储存,那么聚合就出现了。

数组和集合类同样是容器。有什么不同?

数组虽然是可以存储对象,但是长度是固定不变得。集合的长度可以动态改变的。数值是可以存储基本数据类型,集合只能存储对象。(如String)

集合的构成

Collection的两个常用子接口

  • List(列表):

List<E>有序的 collection(也称为序列)。实现此接口可以对每一个列表精确的控制。元素可以重复。因为该集合体系有索引

ArrayList:底层的数据结构使用的是数组结构,特点:查询速度比很快,但是删除速度稍慢,因底层是数组的数据结构,只能通过角标索取,当我们删除一个元素的时候后面的元素都要向后移动,线程不同步。

LinkedList:底层使用的链表的数据结构,特点是增删的熟读快。但是查询的速度稍慢。

Vector:底层是数组数据结构,线程同步。(现在很不用了)

 

  • Set(集合):

Set<E>一个不包含重复元素的 collection。set 不包含满足 e1.equals(e2) 的元素对 e1e2,并且最多包含一个 null 元素。

HashSet:数据结构是哈希表,

保证元素唯一性的原理,判断hashCode的值是否想相同,如果相同,还会继续判断元素的equal方法,否则返回true

Treeset:基于 TreeMapNavigableSet 实现。使用元素的自然顺序对元素进行排序,或者根据创建 set 时提供的 Comparator 进行排序,具体取决于使用的构造方法。

底层数据结构是二叉树,保证数据唯一性的依据是:compareTo方法值得return的返回值。

方法摘要(添加,删除)

返回值方法名解释
booleanadd(E e)添加对象
booleanaddAll(Collection<? extends E> c)添加Cllection
booleanremove(object o)移出指定元素
booleanremoveAll(Collection<?> c)移除Collection指定的所元素
Iterator<E>iterator()获得两个集合交集的迭代器,就是生成两个集合的相同的元素
voidclerar删除集合的所有的元素

 

获取元素的思路:就是判断和取出 实现Iterable<T>

所有的集合都需要一些取出方式,所以他们就会有一定的共性,那么我们就把他定义成为在集合的内部,

那么我们把他定义成为内部类,就可以对集合的元素进行操作。 所以就抽取出了一个

接口:Iterable<T> (迭代器)ListIterable出现了以后就可以对List集合进行增删除改查。

实现这个接口允许对象成为 "foreach" 语句的目标

Iterator<T>interitor()返回一组T类型上进行迭代的迭代器

迭代器方法摘要

booleanhasNext如果仍然有元素可则返回true
Enext()返回下一个迭代的元素
voidremove()从迭代器指向Collection中的元素移除

改:

Eset(int index ,E element用指定元素替换列表中指定位置的元素

List集合当中方法摘要的特别之处:List对象 是有索引的。都带脚标。

查:

Eget(int index )返回列表中指定位置的元素。

具体放方法的查看,API文档:http://www.w3cschool.cc/manual/jdk1.6/

 

迭代器的使用方法

package com.text;

import java.util.ArrayList;
import java.util.Iterator;

public class List
{
    
    public static void main(String[] args)
    {
        //创建长度为10的
        ArrayList lang = new ArrayList();
        lang.add("abc1");
        lang.add("abc2");
        lang.add("abc1");
        lang.add("abc2");
        lang.add("abc1");
        lang.add("abc3");
        lang.add("454");

        
    }
    //去除重复元素的方法
    public static ArrayList singleElement( ArrayList al)
    {
        //用到conkd
        ArrayList newAL = new ArrayList();
        //创建查找。 如果第一次存在我我们记录。如果在有同样的内容我们就不添加
        //创建迭代器我们反复的查找
        Iterator it= al.iterator();
        while(it.hasNext())
        {
            Object ob = it.next();
            if (!newAL.contains(ob))
            {
                //如果新的没有我们就添加。有就不添加
                newAL.add(ob);
            }
        }
            
        return newAL;
    }

}


### Java 高级集合进阶教程 #### Set 接口及其子类特性 Set接口是Java集合框架中的个重要部分,它不允许存储重复元素。这使得`Set`非常适合用于去除重复项以及表示数学上的集合理论概念。 - **HashSet**: 实现了`Set`接口,内部基于哈希表实现[^3]。其特点是查找速度非常快,因为它是无序的,并且允许null值的存在(仅限)。为了保证元素唯性,在向`HashSet`中添加对象时会调用该对象的`hashCode()`和`equals()`方法来判断是否已经存在相同元素。 ```java import java.util.HashSet; public class Student { private String name; public Student(String name){ this.name = name; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((name == null) ? 0 : name.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null || getClass() != obj.getClass()) return false; Student other = (Student) obj; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; } } ``` - **LinkedHashSet**: 继承自`HashSet`,除了具备后者所有的性质外还保持了插入顺序不变。这意味着当你迭代这个set的时候,你会按照最初加入这些项目的次序得到它们。 - **TreeSet**: 提供了种有序的方式去保存元素,底层采用红黑树结构实现了排序功能。可以通过自然排序(`Comparable`)或定制比较器(`Comparator`)两种方式定义元素之间的大小关系。 #### Collection 和 Map 的区别与联系 在Java中,`Collection`是个顶层接口,代表组单类型的对象列表。而`Map`则用来映射键到值之间的关联,即每对键都对应着唯的值[^4]。 对于想要深入了解高级集合特性的开发者来说: - `Collection`适用于处理单列数据; - `Map`更适合于管理具有键值对形式的数据。 了解两者间的差异有助于选择合适的数据容器以满足特定应用场景的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值