集合

作者: 我是猪队友Y | 来源:发表于2016-09-25 14:47 被阅读0次

为什么使用集合:

在java中数组的大小是固定的,不能改变。而且只能存放同一种类型的数据,而java的集合可以创建和存放大小不固定的数据。java集合都在java.util包中。

Collection

Collection接口是所有集合的根接口

- 有序 重复
Collection

Set(集)

set不重复,无序。如果自己写的类需要重写(hashcode和equals)不然比较的内存,这样使得所有实例都不相同。set有一个子接口叫做SortedSet,它具有排序功能。而TreeSet是SortedSet的实现类。

实现类:

LinkedHashSet:

和HashSet唯一区别是有序的。

HashSet :

采用散列的存储方法,是无序的

TreeSet :

- 有序 重复
HashSet
AbstractSet
TreeSet 是(用二叉树排序)
LinkedHashSet

使用二叉树排序,如果存放自定义类则报错,因为TreeSet在将自定义类转换成comparable的时候错误(TreeSet无法对自定义类经行排序)。有两种方法解决。

方法一:

自定义类继承Comparable

class Person  implements Comparable<Person>{
    private String name;
    private int  age;
    private double sore;
    public Person(String name, int age,double sore) {
        super();
        this.name = name;
        this.age = age;
        this.sore=sore;
        
    }
    
    @Override
    public int compareTo(Person o) {
        // TODO Auto-generated method stub
        //按年龄顺序再按名字顺序
        int num=this.age>o.age?1:-1;
        return this.age==o.age?this.name.compareTo(o.name):num;
    }
}

public class LearnOfSet {  //测试类
    public static void main(String args[]){
    
        Set<Person> set2;
        set2=new TreeSet<Person>();
        set2.add(new Person("张三", 15,90));
        set2.add(new Person("李四", 20,80));
        set2.add(new Person("王五", 14,100));
        set2.add(new Person("赵六", 19,98));
        set2.add(new Person("吴七", 19,60));
        set2.add(new Person("可八", 50,80));
        set2.add(new Person("王九", 50,70));
        set2.add(new Person("赵十一", 50,110));
        set2.add(new Person("刘十三", 50,60));
        set2.add(new Person("秦十二", 50,60));
        
        for (Person person : set2) {   //遍历
            System.out.println(person.toString());
        }
    }
}

方法二:

实现Comparator接口

public class LearnOfSet {
    public static void main(String args[]){

        Set<Person> set2;
        set2=new TreeSet<Person>(new LearnOfSet().new PersonScoreComparator());
        set2.add(new Person("张三", 15,90));
        set2.add(new Person("李四", 20,80));
        set2.add(new Person("王五", 14,100));
        set2.add(new Person("赵六", 19,98));
        set2.add(new Person("吴七", 19,60));
        set2.add(new Person("可八", 50,80));
        set2.add(new Person("王九", 50,70));
        set2.add(new Person("赵十一", 50,110));
        set2.add(new Person("刘十三", 50,60));
        set2.add(new Person("秦十二", 50,60));
        
        for (Person person : set2) {
            System.out.println(person.toString());
        }
    }
    public class PersonScoreComparator implements Comparator<Person>{

        @Override
        public int compare(Person o1, Person o2) {
            // TODO Auto-generated method stub
            if(o1.getSore()>o2.getSore()) return 1;
            if(o1.getSore()<o2.getSore()) return -1;
            if(o1.getAge()>o2.getAge()) return 1;
            if(o1.getAge()<o2.getAge()) return -1;
            return 1;
        }
    }

}

List(列表)

实现类:

LinkedList:链表实现,增删快,查询慢

Vector:数组实现,线程安全,重量级(一般不用)。

ArrayList: 数组实现,查询快,增删慢,线程不安全,轻量级;

- 有序 重复
List

Map(映射)

实现类:

HashMap:允许null值和null键

Hashtable:线程安全的,不允许null值和null键

LinkedHashMap:维护着一个运行于所有条目的双重链接列表。存储的数据是有序的。

Properties:key和value都是String类型,用来读配置文件;
TreeMap:对Map经行排序,和TreeSet用法相似

- 有序 重复
HashSet 使用key-value来映射和存储数据,Key必须惟一,value可以重复
AbstractSet 使用key-value来映射和存储数据,Key必须惟一,value可以重复
TreeSet 是(用二叉树排序) 使用key-value来映射和存储数据,Key必须惟一,value可以重复

两个工具类 Arrays 和 Collections

1.Arrays、此类包含用来操作数组(比如排序和搜索)的各种方法。

2.Collections、主要提供了在 collection 上进行操作的静态方法(同步集合类方法) 。

Collections.synchronized... 方法将List 、 Map 或者Set转换成线程安全。

Collections.sort():将List经行排序,但要实现上诉TreeSet的两个接口中的一个。

相关文章

  • 我的Swift的学习总结 -->第二周

    集合 集合:Set,定义一个集合可以写成:var 集合名 : Set<集合类型> = [集合元素],具体的集合应用...

  • markdown 测试

    集合 集合 集合 引用

  • kotlin学习第五天:集合,高阶函数,Lambda表达式

    集合 list集合 list集合分为可变集合与不可变集合。由list of创建的集合为不可变集合,不能扩容,不能修...

  • kotlin练习 ---- 集合练习

    kotlin练习 - 集合练习 Set集合 Set集合创建 Set集合的使用 List集合 List集合创建 Li...

  • 集合总结

    集合 集合分为单列集合和双列集合两种: 一.单列集合: Collection是单列集合的顶级接口: 其中有三类集合...

  • 映射、元组、集合

    映射 元组 集合 集合之seq 集合之set 集合之map

  • 16.Collection集合

    主要内容: Collection 集合 迭代器 增强for List 集合 Set 集合 1,集合 集合是java...

  • 集合与有序集合

    集合分为有序集合 (zset) 和无序集合 (set), 一般无序集合也直接说成集合 无序集合 (set) 无序集...

  • python入坑第八天|集合

    好的,各位蛇友,我们今天来学习集合。 内容: 集合的创建 集合操作符号 集合的内置函数 集合的创建 集合用set(...

  • 集合框架

    集合框架的概念 集合:存放数据的容器 集合框架:java中,用于表示集合,以及操作集合的类和接口的统称 数组与集合...

网友评论

      本文标题:集合

      本文链接:https://www.haomeiwen.com/subject/jtrfyttx.html