JAVA的集合归类

集合可分为三种:List,Set,Map。
一.List
List是有序存储的。
List的创建:
List<类型> list=new ArrayList<>()
list.add(a) 将a存入list集合中。
list.remove(i)将集合中索引i的数据删除。
List有3种遍历方法:

package com.zhongruan.example;
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
public class Demo1 {
    public static void main(String[] args) {
        List<String> a = new ArrayList<>();
        a.add("a");
        a.add("s");
        a.add("d");
        a.add("c");
        a.add("r");
        /*  第一种方法  遍历
        for (String s : a) {
            System.out.println(s);
        }
         */
        /*   第二种方法 遍历
        for(int i=0;i<a.size();i++){
            System.out.println(a.get(i));
        }
         */
        //第三种 遍历加添加
        ListIterator<String> listIterator = a.listIterator();
        while (listIterator.hasNext()){
            String s1 = listIterator.next();
            if("c".equals(s1)){
                listIterator.add("ssss");
            }
        }
        for (String s : a) {
            System.out.println(s);
        }
    }
}	

list案例:

package com.zhongruan.example;
import java.util.ArrayList;
import java.util.List;
public class test1 {
    /*
    1.自定义MyList类,实现存取元素的功能。
- 定义add方法,可以保存元素,添加MyList尾部。
- 定义remove方法,可以获取到最后添加的元素,并从MyList中移除该元素。
- 定义show方法,可以展示MyList中的元素。
     */

    public static void main(String[] args) {
        MyList mylist=new MyList();
        for(int i=0;i<3;i++){
            mylist.add(i);
        }
        System.out.println("添加元素后:");
        mylist.show();
        Integer remove= mylist.remove();
        System.out.println("获取元素:");
        System.out.println(remove);

        System.out.println("获取元素后:");
        mylist.show();
    }

    static class MyList{
        List<Integer> list = new ArrayList<>();

       public void add(int i) {
            list.add(i);
       }

        public void show() {
            System.out.println(list);
        }

        public Integer remove() {
            Integer remove = list.remove(list.size() - 1);
           return remove;
        }
    }
}

二.Set
set是无序存储的,不允许有重复元素。
HashSet能自动删除重复的元素。
HashSet(不按输入顺序输出)。
LinkedHashSet(可按输入顺序输出)。
HashSet存储类时,要在类中添加equals()函数与hascode()函数。
TreeSet能使元素排序,也可保留重复的元素。
TreeSet的三种方法:
1.comparable接口用于类。(外部类)
2.comparator接口用于main函数的类中。(直接内部类)
3直接使用new Comparator<>()函数。(匿名内部类)
HashSet的案例:

package com.zhognruan.example;
import java.util.HashSet;
import java.util.Random;
public class Demo1 {
    public static void main(String[] args) {
        HashSet<Integer> set = new HashSet<>();
        Random r = new Random();
        while(set.size()<10){
            set.add(r.nextInt(20)+1);
        }
        for (Integer s : set) {
            System.out.println(s);
        }

    }
}

TreeSet案例:
Person类的创建

package com.zhognruan.example;
import java.util.Objects;
public class Person /*implements Comparable<Person>*/{
    private String name;
    private int age;

    public Person() {

    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Person person = (Person) o;
        return age == person.age &&
                Objects.equals(name, person.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }

    /*@Override
    public int compareTo(Person o) {
        return o.getName().equals(this.getName()) ? 0 : this.getAge() - o.getAge();
    }*/
}
package com.zhognruan.example;
import java.util.Comparator;
import java.util.Set;
import java.util.TreeSet;
public class Demo3 {
    public static void main(String[] args) {
//        Set<Person> set = new TreeSet<>(new Demo());
        Set<Person> set=new TreeSet<>(new Comparator<Person>() {
            @Override
            public int compare(Person o1, Person o2) {
                return o1.getName().equals(o2.getName())?0:o1.getAge()-o2.getAge();
            }
        });
        set.add(new Person("shaj", 20));
        set.add(new Person("asdad", 567));
        set.add(new Person("asdsa", 23));
        set.add(new Person("shasdsa", 55));
        set.add(new Person("zdd", 30));
        for (Person person : set) {
            System.out.println(person);
        }

    }
}
/*class Demo implements Comparator<Person> {

    @Override
    public int compare(Person o1, Person o2) {
        return o1.getName().equals(o2.getName())?0:o1.getAge()-o2.getAge();
    }
}*/

三.Map
Collections操作集合工具类。
常见的几个小方法:
A:public static void sort(List list)
B:public static int binarySearch(List<?> list,T key)
C:public static T max(Collection<?> coll)
D:public static void reverse(List<?> list)
E:public static void shuffle(List<?> list)
其中,Collections.shuffle(list);是打乱list集合中的元素,而sort是给集合中的元素排序。
Map主要是以键值对的形式存放到集合中,Map集合的键是唯一的,值是可重复的,属于双列集合,一般都是根据键来找值。
Map集合的遍历
方式A:键找值
a:获取所有键的集合
b:遍历键的集合,得到每一个键
Map案例:

package com.zhongruan.example;
import java.util.*;
public class Demo3 {
    /*
        需求
        按照斗地主的规则,完成洗牌发牌的动作。
        具体规则:
        1. 组装54张扑克牌将
        2.  54张牌顺序打乱
        3.  玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌
        4.  查看三人各自手中的牌(按照牌的大小排序)、底牌
     */
    public static void main(String[] args) {
        Map<Integer, String> poker = new HashMap<>();
        int count = 1;
        poker.put(count++, "大王");
        poker.put(count++, "小王");
        List<String> color = new ArrayList<>();
        List<String> num = new ArrayList<>();
        Collections.addAll(color, "红桃", "黑桃", "梅花", "方块");
        Collections.addAll(num, "2", "A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4", "3");
        for (String n : num) {
            for (String c : color) {
                String s = c + n;
                poker.put(count++, s);
            }
        }
        List<Integer> list = new ArrayList<>();
        Set<Integer> set = poker.keySet();
        list.addAll(set);
        List<Integer> dipai = new ArrayList<>();
        List<Integer> p1 = new ArrayList<>();
        List<Integer> p2 = new ArrayList<>();
        List<Integer> p3 = new ArrayList<>();
        Collections.shuffle(list);
        for (int i = 0; i < list.size(); i++) {
            if (i >= 51) {
                dipai.add(list.get(i));
            } else if (i % 3 == 0) {
                p1.add(list.get(i));
            } else if (i % 3 == 1) {
                p2.add(list.get(i));
            } else if (i % 3 == 2) {
                p3.add(list.get(i));
            }
        }
        Collections.sort(p1);
        Collections.sort(p2);
        Collections.sort(p3);
        List<String> dipai1 = new ArrayList<>();
        List<String> player1 = new ArrayList<>();
        List<String> player2 = new ArrayList<>();
        List<String> player3 = new ArrayList<>();
        for (Integer i1 : dipai) {
            dipai1.add(poker.get(i1));
        }
        for (Integer i2 : p1) {
            player1.add(poker.get(i2));
        }
        for (Integer i3 : p2) {
            player2.add(poker.get(i3));
        }
        for (Integer i4 : p3) {
            player3.add(poker.get(i4));
        }
        System.out.println("底牌:" + dipai1);
        System.out.println("玩家1:" + player1);
        System.out.println("玩家2:" + player2);
        System.out.println("玩家3:" + player3);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值