• Java类集总结之一


    1)类集:一个动态的对象数组,是对一些实现好的数据结构进行了包装。

      类集框架的特性:高性能,对基本类集(动态数组、链接表、树和散列表)的实现是高效率的,所以一般很少需要人工去对这些“数据引擎”编写代码;

                 框架必须允许不同类型的类集以相同的方式和高度互操作方式工作(对于任何对象所有的操作形式都是一样的,例如想向集合中增加元素,则一定是使

                 用add()方法,另外类集中的元素类型都是统一的,即一个集合中要么全是A类对象,要么全是B类对象);

              类集必须是容易扩展和修改的,为了实现这一目标,类集框架被设计成包含了一组标准的接口。 

    2)在使用各个类集接口时,如果没有指定泛型,则肯定会出现警告信息,

    此时,泛型将被擦除而全部使用Object接收。

    3)类集框架本身不受对象数组长度的限制。

    4)Collection接口

    此接口使用了泛型,可以保证类集操作的安全性,避免发生ClassCastException

    Collection接口是单值存放的最大父接口。

    5)在开发中,很少直接使用Collectioin接口进行开发,基本上都是使用其子类接口。

    子类接口主要有

    List:可以存放重复的内容

    Set:不能存放重复的内容,所有重复内容靠hashCode()equals()两个方法区分

    Queue:队列接口

    SortedSet:可以对集合中的数据进行排序

    6)集合的标准输出:

    迭代输出:Iterator接口

    只要用到集合的输出操作,就一定使用Iterator接口。

    使用Iterator迭代器可以用来查找、删除指定的元素。

    7)CollectionSetList接口都属于单值的操作,即每次只能操作一个对象,

    Map接口每次可以操作一对对象,即二元偶对象,Map中的每个元素都使用key  value

    的形势存储在集合中。

    8)Collections集合工具类

    通过此类可以方便地操作集合,如替换、检索、排序等操作。

    9)

     1 package cn.itcast.arraylist.demo;
     2 
     3 import java.util.ArrayList;
     4 import java.util.Collection;
     5 import java.util.List;
     6 
     7 public class ArrayListDemo {
     8 
     9     public static void main(String[] args) {
    10         List<String> allList = null;//定义List对象
    11         Collection<String> allCollection = null;//定义Collection对象
    12         allList = new ArrayList<String>();//实例化List对象,只能是String类型
    13         allCollection = new ArrayList<String>();///实例化Collection对象
    14         allList.add("Hello");//从Collection继承的方法
    15      allList.add("Hello");//List可以存放重复的内容
    16         allList.add(0,"Worldl");//List扩充的方法
    17         System.out.println(allList);//输出:[World,Hello]//
    18         allCollection.add("Lxh");
    19 allCollection.add("wwww");
    20 System.out.println(allCollection);
    21 allList.addAll(allCollection);//增加一组对象 22 allList.addAll(0, allCollection);
    23 System.out.println(allList);
    24 } 25 }

    注:ArrayListList的子类,直接通过对象的多态性为List实例化

    ListCollection的子类,通过对象的多态性有ArrayList实例化。

    顺序:Collection(接口)

    List(接口)

    ArrayList(子类)

    注意:集合不是数组:

    10)

     1 import java.util.ArrayList;
     2 import java.util.List;
     3 
     4 public class ArrayListDemo03 {
     5 
     6     public static void main(String[] args) {
     7         List<String> allList = null;
     8         allList = new ArrayList();
     9         allList.add("Hello");
    10         allList.add("wwww");
    11         System.out.println(allList.size());//输出结果:2
    12         System.out.println(allList.get(0));//输出:Hello
    13         for(int i=0;i<allList.size();i++){
    14             System.out.println(allList.get(i));
    15         }
    16         String str[] = allList.toArray(new String[] {});//集合变数组
    17         System.out.println("数组输出");    
    18         for(int j=0;j<str.length;j++){
    19             System.out.println(str[j]);
    20         }
    21     }
    22 
    23 }

    11)

    Set接口是Collection的子类,没有对Collection进行扩充,但是要求更严格,不能存放重复内容;当存入重复内容时,重复元素只增加一次。

    Set接口的实例无法像List接口那样进行双向输出,因为此接口没有提供像List那样的get(int index)方法。

    顺序:

    Collection(接口)

    Set(接口)

    SortedSet(接口)HashSet(子类)、TreeSet(子类)

    HashSet里面不能存放重复元素,而且采用散列的存储方式,所以没有顺序,即输出是随机顺序。

    12)

     1 import java.util.HashSet;
     2 import java.util.Set;
     3 
     4 public class HashSetDemo01 {
     5 
     6     public static void main(String[] args) {
     7         Set<String> allSet = new HashSet<String>();
     8         allSet.add("D");
     9         allSet.add("B");
    10         allSet.add("C");
    11         allSet.add("C");
    12         allSet.add("C");
    13         allSet.add("A");        
    14         allSet.add("E");
    15         System.out.print(allSet);
    16     }
    17 
    18 }

    13)但是,当HashSet中存放自定义的类,每个对象所在的类必须覆写Object类的hashCode()equals()toString() 3个方法。覆写这三个方法之后,才能实现无重复存放。

    package cn.itcast.comparable.demo01;

    14)

     1 import java.util.HashSet;
     2 import java.util.Set;
     3 
     4 class Person {
     5     private String name;
     6     private int age;
     7     public Person(String name,int age){
     8         this.name = name;
     9         this.age = age;
    10     }
    11     public boolean equals(Object obj){
    12         if(this==obj){
    13             return true;
    14         }
    15         if(!(obj instanceof Person)){
    16             return false;
    17         }
    18         Person p = (Person)obj;
    19         if(this.name.equals(p.name)&&this.age==p.age){
    20             return true;
    21         }else{
    22             return false;
    23         }
    24     }
    25     public int hashCode(){
    26         return this.name.hashCode() * this.age;
    27     }
    28     public String toString(){
    29         return "姓名"+this.name+":年龄"+this.age;
    30     }
    31 }
    32 
    33 public class RepeatHashSet {
    34 
    35     public static void main(String[] args){
    36         Set<Person> allSet = new HashSet<Person>();
    37         allSet.add(new Person("张三",20));
    38         allSet.add(new Person("李四",22));
    39         allSet.add(new Person("王五",20));
    40         allSet.add(new Person("赵六",20));
    41         allSet.add(new Person("孙七",22));
    42         allSet.add(new Person("王五",20));
    43         System.out.println(allSet);
    44         
    45     }
    46 }

    15)TreeSet类:对输入的数据进行有序排列,即在集合中插入数据时时没有顺序的,但是输出之后数据是有序的,所有TreeSet是排序的子类。

    16)

     1 import java.util.Set;
     2 import java.util.TreeSet;
     3 
     4 public class TreeSetDemo01 {
     5 
     6     public static void main(String[] args) {
     7         Set<String> allSet = new TreeSet<String>();
     8         allSet.add("C");
     9         allSet.add("C");
    10         allSet.add("C");
    11         allSet.add("D");
    12         allSet.add("A");
    13         allSet.add("D");
    14         allSet.add("B");
    15         allSet.add("E");
    16         allSet.add("A");
    17         System.out.print(allSet);//输出结构:ABCDE
    18     }
    19 }

    17)如果要将自定义的类存入TreeSet中,TreeSet中的每个对象所在的类必须实现Comparable接口,并且在compareTo方法中指明是按照哪个属性进行比较的。

     1 import java.util.Iterator;
     2 import java.util.Set;
     3 import java.util.TreeSet;
     4 
     5 class Student implements Comparable<Student>{
     6     private int num;
     7     private String name;
     8     private int score;
     9     Student(String name,int num, int score ){
    10         this.num = num;
    11         this.name = name;
    12         this.score = score;
    13     }
    14     
    15     public String toString(){
    16         return num + "……"+name + "……" + score;
    17     }
    18     @Override
    19     public int compareTo(Student stu) {
    20         if(this.num>stu.num){
    21             return 1;
    22         }else if(this.num<stu.num){
    23             return -1;
    24         }else{
    25             return 0;
    26         }
    27     }
    28 }
    29 
    30 public class TreeSetDemo01 {
    31 
    32     public static void main(String[] args) {
    33         Set<Student> allSet = new TreeSet<Student>();
    34         
    35         allSet.add(new Student("zhangsan",20,70));
    36         allSet.add(new Student("wangwu",27,85));
    37         allSet.add(new Student("lisi",30,62));
    38         allSet.add(new Student("zhangsan",28,65));
    39         allSet.add(new Student("sunqi",25,92));
    40         allSet.add(new Student("wwww",26,65));
    41         
    42         Iterator<Student> it = allSet.iterator();
    43         while(it.hasNext()){
    44             System.out.println(it.next());
    45         }
    46     }
    47 }
  • 相关阅读:
    2020软件工程作业00——问题清单
    2020软件工程作业04
    2020软件工程作业03
    2020软件工程作业02
    2020软件工程作业01
    2020软件工程个人作业06——软件工程实践总结作业
    2020软件工程作业05
    2020软件工程作业00——问题清单
    2020软件工程作业04
    2020软件工程作业02
  • 原文地址:https://www.cnblogs.com/XuGuobao/p/7260617.html
Copyright © 2020-2023  润新知