寒假Day56:JAVA集合Set+TreeSet+List+Map

java集合简单介绍

存放在java.util包中,集合可以存放不同的数据类型

java集合分为Set、List、Map

下面所说的有序和无序不是指集合中的排序,而是是否按照元素添加的顺序来存储对象

Set:无序、不可重复

List:有序、可重复

Map:具有映射关系


Set

遍历set集合中的元素:

方法一:

//迭代器遍历集合
Iterator it = set.iterator();
//hasNext()判断迭代器中是否还有下一个元素 有ture
//next() 获取下一个元素
 while (it.hasNext()) {
    System.out.println(it.next());
}

注意:使用迭代器的时候,不能仅仅只导入HashSet和Set,必须要导入util包,否则报错。

import java.util.*;

报错如下:

方法二:

//遍历二:for each迭代集合
//set中的每一个元素赋值给obj
for (Object obj : set) {
    System.out.println(obj);
}

Set操作完整代码:

import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import java.util.*;

public class A {
    public static void main(String[] args) {
        Set set = new HashSet();
        //等价于Set<Object> set =new HashSet<Object>();
        set.add(1);
        set.add("a");//set里可以存不同类型的对象
        //如果只想存同一类型,那么引入泛型
        //则写成Set<String> set=new HashSet<String>();
        set.remove(1);
        // System.out.println(set);
        System.out.println(set.contains("a"));
        set.clear();//[]
        set.add(1);
        set.add(2);
        set.add(null);//可以存取null,会被放在set集合的第一个位置,因为是按照hashcode值排列的
        set.size();//获取集合元素个数

        //遍历一:
        //迭代器遍历集合
        Iterator it = set.iterator();
        //hasNext()判断迭代器中是否还有下一个元素 有ture
        //next() 获取下一个元素
        while (it.hasNext()) {
            System.out.println(it.next());
        }

        //遍历二:for each迭代集合
        //set中的每一个元素赋值给obj
        for (Object obj : set) {
            System.out.println(obj);
        }
        //两个对象相等:equals相等、hasCode返回值相等

    }
}

TreeSet

支出两种排序方法:自然排序和定制排序。默认自然排序。 

基本操作+自然排序:

import java.util.Set;
import java.util.TreeSet;

public class A{
    public static void main(String[] args){
        Set<Integer> set=new TreeSet<Integer>();
        set.add(5);
        set.add(2);
        set.add(4);
        set.add(3);
        System.out.println(set);//TreeSet的自然排序
        //output:[2, 3, 4, 5]
        //其他一些操作和set一样
        //Interator<Integer> it=....
        //for(In teger i:set){
        //}
    }
}

自定义排序:

TreeSet如何实现自定义排序?
需要提供一个Comparator接口的实现类对象,
然后新建一个类Person,把Person对象存到TreeSet中且按年龄排序,
再实现一个接口,
接着写两个构造,一个无参数,一个有参数。

import java.sql.PseudoColumnUsage;
import java.util.Comparator;
import java.util.Set;
import java.util.TreeSet;

public class A {
    public static void main(String[] args) {
        Set<Person> set = new TreeSet<Person>(new Person());
        Person p1 = new Person("Bob", 30);
        Person p2 = new Person("Alice", 10);
        Person p3 = new Person("Cindy", 20);
        set.add(p1);
        set.add(p2);
        set.add(p3);
        for (Person p : set) {
            System.out.println(p.name + "-->" + p.age);
        }
    }
}

class Person implements Comparator<Person> {
    int age;
    String name;

    public Person() {

    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }//使对象实例化

    @Override
    public int compare(Person o1, Person o2) {//重写了compare这个方法
        if (o1.age > o2.age) {
            return 1;
        } else if (o1.age < o2.age) {
            return -1;
        } else {
            return 0;
        }
    }
}

输出:

注意:

如果把他们的年龄全部改成一样的,输出就只有第一个人的信息。


List

List是一个接口,所以List集合要有一个实现类,主要的实现类就是ArrayList。

基本操作:

import java.sql.Array;
import java.util.ArrayList;
import java.util.*;

public class A {
    public static void main(String[] args) {
        List<String> list = new ArrayList<String>();
        list.add("11");
        list.add("22");
        list.add("33");
        //list.get(2);//访问list下表为2的元素
        //list.add(1,"a");//在下标为1的位置插入a,其他元素后移
        List<String> list2 = new ArrayList<String>();
        list2.add("insert");
        list.addAll(1, list2);//在list中插入list2
        System.out.println(list);//output:[11, insert, 22, 33]
        // list.indexOf("11");//获取该元素在list中出现的第一次的下表
        // list.lastIndexOf("11");
        //list.remove(2);//remove该下标对应的数据
        //list(1,"ff");//把1下标的位置元素改成ff
        // List<String> sublist=list.subList(2,4);//截取下标2-3元素(左开右闭)
    }
}

Map

在java中,Map是一个接口,自然就需要一个实现类,就是HashMap类。

 基本操作:

import java.util.HashMap;
import java.util.*;
import java.util.Map;

public class A {
    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<String, Integer>();
        //key-value
        map.put("b", 9);//和前面两个不一样,不是add
        map.put("a", 3);
        map.put("c", 7);
        System.out.println(map);//{a=3, b=9, c=7}按照key排序
        System.out.println(map.get("b"));//9 根据key取出值
        map.remove("c");//根据key移除键值对
        System.out.println(map.containsKey("a"));//判断是否存在key /true
        System.out.println(map.containsValue(10));//judge value /false

        Set<String> keys = map.keySet();//获取所有key
        map.values();//获取所以value

        //遍历一:集合,map.keySet()
        for (String key : keys) {
            System.out.println("key:" + key + " " + "value:" + map.get(key));
        }

//        //遍历二:map.entrySet();效率更高
//        Set<Entry<String, Integer>> entrys = map.entrySet();
//        for (Entry<String, Integer> en : entrys) {
//            System.out.println("key:" + en.getKey() + " " + "value:" + en.getValue());
//        }//这个不知道为什么我这边会报错??


    }
}

待解决:

上面的map中基本操作中不知道为什么Entry会报错。

原文地址:https://www.cnblogs.com/OFSHK/p/12534876.html