JavaSE学习之集合框架 java.util.Collection、java.util.List、java.util.Set

集合框架

概念

概念:对象的容器,存储对象的对象,可代替数组。

特点:容器的工具类,定义了堆多个对象进行操作的常用方法。

位置:java.util.*;

 


Collection体系集合

Collection代表一组对象,称之为集合

List接口的特点:有序、有小标、元素可重复

Set接口的特点:无序、无下标、元素不能重复

List接口与实现类:有序、有小标(index)、元素可重复(允许o1.equals(o2) == true)

1. public void add(int index,E element); //在index位置插入对象o

2. public E get(int index) // 返回集合中指定位置的元素

3. public int indexOf(Object obj);

4. public int lastIndexOf(Object obj);

5. public int size();

6. public list<E> subList(int fromIndex , int  toIndex); // 返回fromIndex到toIndex下标之间的集合元素

List的实现类

一、数组结构实现,查询快、增删慢;

       1. ArrayList :必须开辟连续空间例如:银行开户?

      (JDK1.2开始,运行效率块,线程不安全):elementDate[]

       2. Vector(JDK1.0开始,运行效率慢,线程安全【同步功能】)

       

二、链表结构实现,查询慢、增删快;

      3. LinkedList:不需要开辟连续空间

              LinkedList在列表的开头及结尾提供了get、remove、offer、insert


Set接口与实现类

1. 特点:无序、无下标,不可重复。

扩展:实现不重复的原理《利用equals()来排除不重复》:流程:首先对比对象的哈希码是否相同(equals()的触发条件),然后调用equals()方法比较内容是否相同,多数情况下equals()需要实现类重载。当对象的哈希码不能准确达到代码要求时,也可以进行重载,可参考下面的代码示例。

接口的方法:

接口的实现类:

      1)HashSet【重点】:hashcode + equals

            1.1)基于HashCode()实现元素不重复;

            1.2)当存入元素的哈希码相同时,会调用equals()进行确认,如结果为true,则拒绝后者存入

     2)TreeSet: ComparaTO()

           2.1)基于排列顺序实现元素不重复;

           2.2)实现了SortedSet接口,对集合元素自动排序;

           2.3)元素对象的类型必须实现Comparable接口,指定排序规则

           2.4)通过CompareTo()方法确定是否为重复元素。

    3)LinkHashSet:链表实现的HashSet,按照链表进行存储,可以保留元素的插入顺序。

// 代码示例:

class Student {
    private String name;
    private Integer age;
    private String sex;
    private Double score;

    public Student() {
        super();
    }

    public Student(String name, Integer age, String sex, Double score) {
        super();
        this.name = name;
        this.age = age;
        this.sex = sex;
        this.score = score;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", sex='" + sex + '\'' +
                ", score=" + score +
                '}' + "\t" + this.hashCode();
    }

    /**
     * 将此类创建的对象设置hashcode一致
     * @return
     */
    @Override
    public int hashCode() {
        return this.name.hashCode() + this.age.hashCode()
                + this.sex.hashCode() + this.score.hashCode();
    }

    /**
     * 前置触发条件:哈希码一致
     * @param obj
     * @return
     */
    @Override
    public boolean equals(Object obj) {
        System.out.println("触发equals() ");

        if (this == obj ){return true;}
        if (obj == null ){return false;}
        if (this.getClass() != obj.getClass()){ return false; }
        Student s = (Student)obj;
        if (this.name.equals(s.name) && this.age.equals(s.age)
                && this.sex.equals(s.sex) && this.score.equals(s.score)) {
            return true;
        }

        return false;
    }
}

 

Collection父接口: java.util.Collection;

特点:代表任意类型的对象,无序、无下标。

方法:

1. boolean add(Object obj) //添加一个对象

2.boolean addAll(Collection c); //将一个集合中的所有对象添加到此集合中。

3. void clear(); //清空集合中所有元素

4.boolean contains(Object o);//判断集合中是否有o元素

5.boolean equals(Object o); //比较刺激和是否与指定对象相等???

6.boolean isEmpty(); //判断集合是否为空

7.boolean remove(Object o); //删除集合中o对象

8.int size(); //返回集合中元素个数

9. Object[] toArray();  //将集合转换为数组

 

 

泛型集合、高级集合、Collection工具类

泛型集合

一、概念:参数化类型、类型安全的集合,强制集合元素的类型一致。

例如:ArrayList<Double> list = new ArrayList<Double>();

<E>  // E = Element / E = Exception , T = Type , K = Key , V = Value 

特点: 

      1. 编译时即可检查,而非运行时报错。

      2.访问时,不必类型转换(拆箱)。

      3. 不同泛型之间引用不能相互赋值,泛型不存在多态。

二、高级集合

public class TestAdvencedGeneric {

    public static void main(String[] args) {

//       实例泛型

        MyClass<Integer> mi = new MyClass<Integer>();
        mi.m1(234);

        MyClass<Double> md = new MyClass<Double>();
        md.m1(234.1);

        MyInterface<Byte> myin = new MyImpClass();
        myin.m2( (byte)22 );

//        静态泛型,可以添加范围控制
//        自动泛型成Double类型
        MyStaticClass.method(3.5);
//        MyStaticClass.method("Hello");

        MyStaticClass.method(new Dog());
//        MyStaticClass.method(new Cat());
    }
}

class MyStaticClass {

    public static <T extends Number> void method(T t) {

    }

    public static <T extends Animal & Comparable> void method(T t) {

    }

//    对象如何排序???

}
class Animal{ }
class Dog extends Animal implements Comparable<Dog> {
    @Override
    public int compareTo(Dog o) {
        return 0;
    }
}
class Cat extends Animal {}

class MyClass<E> {

    public void m1(E e) {

    }

}

interface MyInterface<T> {

    public void m2(T t);

}

class MyImpClass implements MyInterface<Byte> {

    @Override
    public void m2(Byte b) {


    }
}

三、Collection工具类

Collections类中的静态方法:

1.public static void reverse(List<?> list) //反转集合中元素的顺序

2.Collections.static void shuffle(List<?> list) //随机重置集合元素的顺序

3.public static void sort(List<T> list) //升序排序(元素类型必须实现Comparable接口)

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值