三、Java中级--5、集合框架

2018-05-02  本文已影响0人  cybeyond

1、什么是集合、框架

集合:用来存放很多元素的一种类型,可称为集合容器,集合中存储的是对象的引用,其对象实质上存在堆(heap,内存分配的空间)里
框架:结构体系,很多类组成
Java Collection Framework:Java集合框架,又称为JCF

2、数组和集合的关系

数组的缺点是定长的,且只能存同一种类型

3、结构

Java1.8即为Java8,Java1.7即为Java7

4、List的实现类

ArrayList:动态数组,表示数组长度可变

结构

5、List实现类示例:

示例1:

package javastudy;

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

import com.sun.xml.internal.bind.v2.runtime.unmarshaller.XsiNilLoader.Array;

public class Test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        
        ArrayList<String> al=new ArrayList<String>();
        al.add("北京");
        al.add("上海");
        al.add("天津");
        al.add(0,"重庆");//将重庆放在第1个位置
        System.out.println("=====结果1正常输出=======");
        print1(al);
        System.out.println("=====结果2set英文输出=====");
        al.set(1, "BeiJing");//将数字[1]中的改为英文BeiJing
        print1(al);
        System.out.println("====结果3遍历输出=====");
        print2(al);
        System.out.println("====结果4删除某一元素遍历输出====");
        al.remove(2);
        print2(al);
    }
    static void print1(ArrayList<String> al){
        for(int i=0;i<al.size();i++){  //字符串、数组使用length();集合使用size()
            System.out.println(al.get(i));
        }
    }
    static void print2(ArrayList<String>al){
        Iterator<String> it=al.iterator(); //遍历器相当于指针,用iterator去接收al的遍历,存放在it中
        while(it.hasNext()){  //使用while遍历得到每个元素
            System.out.println(it.next());
            
        }
    }
}
执行结果

6、Set的实现类

HashSet实现示例1:

package javastudy;

import java.util.HashSet;
import java.util.Iterator;

public class Test2 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        HashSet<String> hs=new HashSet<String>();
        hs.add("北京");
        hs.add("上海");
        hs.add("天津");
        hs.add("重庆");
        Iterator<String> a=hs.iterator();
        while(a.hasNext()){
            System.out.println(a.next());
        }
    }
}
执行结果

HashSet示例2:使用for循环

package javastudy;

import java.util.HashSet;
import java.util.Iterator;

public class Test2 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        HashSet<String> hs=new HashSet<String>();
        hs.add("北京1");
        hs.add("上海2");
        hs.add("天津3");
        hs.add("重庆4");
//      Iterator<String> a=hs.iterator();
//      while(a.hasNext()){
//          System.out.println(a.next());
//      }
        for(Iterator<String> it=hs.iterator();it.hasNext();){
            System.out.println(it.next());
        }
    }
}
执行结果

TreeSet示例:

package javastudy;

import java.util.HashSet;
import java.util.Iterator;
import java.util.TreeSet;

public class Test2 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        TreeSet<String> ts=new TreeSet<String>();
        ts.add("Beijing");
        ts.add("Shanghai");
        ts.add("Tianjin");
        ts.add("Chongqing");
        for(Iterator<String> it=ts.iterator();it.hasNext();){
            System.out.println(it.next());
        }
    }
}
执行结果

7、TreeSet自定义对象添加

TreeSet是有序的,在存自定义对象时(比如存入两类不同类型数据,以哪个排序为准)排序问题解决方法:
方法1:传入的对象所属的类,必须实现Comparable
示例:

package javastudy;

import java.util.Iterator;
import java.util.TreeSet;

public class Testit1 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        TreeSet<Person> ts=new TreeSet<Person>();
        ts.add(new Person("jack", 20));
        ts.add(new Person("Jerry", 25));
        ts.add(new Person("Mark", 30));
        Iterator<Person> it=ts.iterator();//首先创建一个遍历器
        while(it.hasNext()) {
            Person p=it.next();
            p.print(); //由于是姓名和年龄两个元素,因此存在不能排序比较的问题
        }
    }
}
class Person implements Comparable<Person>{  //实现Comparable方法,将两个Person进行比较;Compareable属于java.lang包,不用导入即可使用
    String name;
    int age;
    Person(String name,int age){
        this.name=name;
        this.age=age;
    }
    void print(){
        System.out.println(String.format("姓名=%s,年龄=%d", name,age));
    }
    @Override
    public int compareTo(Person o) {  //要比较的与o进行比较
        // TODO Auto-generated method stub
        if(this.age>o.age) {//执行后按照年龄排序输出
            return 1;
        }else if(this.age<o.age){
            return -1;
        }else {
            return 0;
        }
    }
}
执行结果

方法2:初始化TreeSet时,传入一个比较器(比较器是一个实现了Comparator的类的对象)作为一个构造函数
示例

package javastudy;

import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;



public class Test3 {

    public static void main(String[] args) {    
        TreeSet<Dog> ts=new TreeSet<Dog>(new MyCom());
        ts.add(new Dog("Hash", 3));
        ts.add(new Dog("lucy", 5));
        ts.add(new Dog("nick", 2));
        Iterator<Dog> it=ts.iterator();
        while(it.hasNext()){
            System.out.println(it.next());
        }
}
}   
class Dog {
    String name;
    int weight;
    Dog(String name,int weight){
        this.name=name;
        this.weight=weight;
    }
    @Override  //此处为重写,否则会调用object中的toString(),得到的结果是一堆字符,即引用的地址值
     public String toString(){
         return "名字=" +name+ ",体重=" +weight;
            }
         }
class MyCom implements Comparator<Dog> { //定义一个比较器
        public int compare(Dog o1, Dog o2) {
        // TODO Auto-generated method stub
        return o1.name.compareTo(o2.name);
    }
}

当你的一个类中没有重写.toString()方法的时候就会执行根类Object的这个.toString()方法。返回形式:对象的类名+@+哈希值的16进制

上一篇下一篇

猜你喜欢

热点阅读