集合框架

迭代器(Iterable)

实现Iterable接口的类都可以用for-each来遍历。

Iterator iterator = list.iterator();// 迭代器

ArrayList底层用数组储存,遍历元素和随机访问元素效率高,添加元素删除元素效率低。
例:

import java.util.ArrayList;
import java.util.List;

import javax.swing.SpringLayout.Constraints;

public class TestModify {
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add("aaa");
        list.add("bbb");
        list.add("ccc");
        print(list);
        System.out.println("=============");

        /**
         * 替换指定位置的元素
         */
        // list.set(1, "2");
        // print(list);

        /**
         * 删除所有元素
         */
        // list.clear();
        // print(list);

        /**
         * 查找集合中是否存在指定元素
         */
        boolean contains = list.contains("aaa");
        System.out.println(contains);

    }

    private static void print(List list) {
        // TODO Auto-generated method stub
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));

        }
        if (list.size() == 0) {
            System.out.println("meile");
        }

    }

}

删除元素,例:

import java.util.ArrayList;
import java.util.List;

import javax.swing.SpringLayout.Constraints;

public class TestModify {
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add("aaa");
        list.add("bbb");
        list.add("ccc");
        print(list);
        System.out.println("=============");

        /**
         * 替换指定位置的元素
         */
        // list.set(1, "2");
        // print(list);

        /**
         * 删除所有元素
         */
        // list.clear();
        // print(list);

        /**
         * 查找集合中是否存在指定元素
         */
        boolean contains = list.contains("aaa");
        System.out.println(contains);

    }

    private static void print(List list) {
        // TODO Auto-generated method stub
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));

        }
        if (list.size() == 0) {
            System.out.println("meile");
        }

    }

}

LinkedList底层用链表储存,插入和删除元素效率高,遍历和随机访问效率低。
例:

import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;

public class TestLinked {
    public static void main(String[] args) {
        List list = new LinkedList<>();
        list.add("aaa");
        list.add("bbb");
        list.add("ccc");
        print(list);
        System.out.println("================");

        List temp = new LinkedList<>();
        temp.add("ddd");
        temp.add("aaa");
        print(temp);
        System.out.println("================");
        /**
         * 删除两个集合相同的地方
         */
        list.removeAll(temp);
        print(list);

    }

    /**
     * 加强for遍历
     */
    private static void print(List list) {
        // TODO Auto-generated method stub
        for (Object o : list) {
            System.out.println(o);
        }

    }

}

List添加顺序和访问顺序是一致的,能添加重复元素。


HashSet底层用数组+链表,添加速度快,删除速度快,查询速度快,无序。
例:

import java.util.HashSet;
import java.util.Set;

public class TestHash {
    public static void main(String[] args) {
        Set set = new HashSet();
        set.add("aaa");
        /**
         * 添加是否成功
         */
        // boolean is = set.add("aaa");
        // System.out.println(is);
        set.add("bbb");
        set.add("ccc");
        print(set);
        /**
         * 查看集合中是否存在元素
         */
        boolean contains = set.contains("ccc");
        System.out.println(contains);
    }

    private static void print(Set set) {
        // TODO Auto-generated method stub
        for (Object o : set) {
            System.out.println(o);
        }
    }

}

重写Hashcode方法和equals方法
去重
例:

public class Student {
    private String name;
    public Student(String name) {
        this.name=name;
    }
    @Override
    public String toString() {
        return "姓名:"+name;
    }
    @Override
    public int hashCode() {
        // 相同的字符串肯定具有相同的hashcode
        return name.hashCode();
    }
    @Override
    public boolean equals(Object obj) {

        return true;
    }


}
import java.util.HashSet;
import java.util.Set;

public class TestStudent {
    public static void main(String[] args) {
        Set set = new HashSet<>();
        set.add(new Student("张三"));
        set.add(new Student("李四"));
        set.add(new Student("王五"));
        set.add(new Student("李四"));
        set.add(new Student("李四"));
        set.add(new Student("李四"));
        print(set);
    }

    private static void print(Set set) {
        // TODO Auto-generated method stub
        for(Object o:set){
            System.out.println(o);
        }

    }

}

TreeSet 底层采用二叉树粗存结构,有序,查询比List快,没有HashSet快;需要实现Comparable。

public class Student implements Comparable<Student> {
    private String name;
    private int age;
    private boolean sex;

    public Student(String name, int age, boolean sex) {
        super();
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public boolean isSex() {
        return sex;
    }

    @Override
    public String toString() {
        // TODO Auto-generated method stub
        return "姓名" + name + "年龄" + age + "性别" + sex;
    }

    @Override
    public int compareTo(Student o) {
        // TODO Auto-generated method stub
        return 0;
    }

}

TreeSet使用CompareTo去重,还能排序。
本例中写的排序方式是:按年龄排序、年龄相同按姓名排、姓名相同按性别排。

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

public class Tree {
    public static void main(String[] args) {
        Set set = new TreeSet<>(new Comparator<Student>() {

            @Override
            public int compare(Student o1, Student o2) {
                // TODO Auto-generated method stub
                int c = o1.getAge() - o2.getAge();
                if (c != 0) {
                    return c;
                }
                c = o1.getName().compareTo(o2.getName());
                if (c != 0) {
                    return c;
                }
                return new Boolean(o1.isSex()).compareTo(o2.isSex());
            }
        });
        set.add(new Student("张三", 10, true));
        set.add(new Student("李四", 10, false));
        set.add(new Student("张三", 11, true));
        set.add(new Student("张三", 10, false));
        set.add(new Student("李四", 10, false));
        print(set);
    }

    private static void print(Set set) {
        // TODO Auto-generated method stub
        for (Object o : set) {
            System.out.println(o);
        }

    }

}

MAP(映射)

返回一对键值对,通过键获得值,键不允许重复,重复就覆盖,但是值允许重复
HashMap允许使用null键null值
TreeMap Key必须实现Comparable
例:

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class TestMap {
    public static void main(String[] args) { 
        Map map = new HashMap<>();
        map.put("a", "abc");
        map.put("b", "bcd");
        map.put("c", "cde");
        print(map);
    }

    private static void print(Map map) {
        // TODO Auto-generated method stub
        Set keySet = map.keySet();
        for(Object key:keySet){
            System.out.println(key+"--->"+map.get(key));
        }
    }

}
public class Student {
    private String name;
    private int age;
    public Student(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }
    @Override
    public String toString() {
        // TODO Auto-generated method stub
        return "姓名"+name+",年龄"+age;
    }

}
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class TestMap {
    public static void main(String[] args) {
        Map map = new HashMap<>();
        map.put("f", "fgh");
        map.put("a", "abc");
        map.put("v", "vbn");
        map.put("b", "bcd");
        map.put("z", "zxc");
        map.put("c", "cde");
        print(map);
    }

    private static void print(Map map) {
        // TODO Auto-generated method stub
        Set keySet = map.keySet();
        for (Object key : keySet) {
            System.out.println(key + "--->" + map.get(key));
        }
    }

}
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class TestMap1 {
    public static void main(String[] args) {
        Map map = new HashMap<>();
        map.put(new Student("张三", 1), new Student("张三", 10));
        map.put(new Student("李四", 1), new Student("李四", 9));
        map.put(new Student("王五", 1), new Student("zhangsan", 2));
        print(map);
    }

    private static void print(Map map) {
        // TODO Auto-generated method stub
        Set keySet = map.keySet();
        for(Object key:keySet){
            System.out.println(key+"==="+map.get(key));
        }
    }
}
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

public class TestTreeMap {
    public static void main(String[] args) {
        Map map = new TreeMap<>();
        map.put(new Student("张三", 1), new Student("张三", 10));
        map.put(new Student("李四", 1), new Student("李四", 9));
        map.put(new Student("王五", 1), new Student("zhangsan", 2));
        print(map);
    }

    private static void print(Map map) {
        // TODO Auto-generated method stub
        Set keySet = map.keySet();
        for (Object key : keySet) {
            System.out.println(key + "====" + map.get(key));
        }

    }

}

泛型

解决数据类型操作不同意产生的异常。

public class Student {
    private String name;
    private int age;

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

    @Override
    public String toString() {
        // TODO Auto-generated method stub
        return "姓名"+name+"年龄"+age;
    }

}
import java.util.ArrayList;
import java.util.List;

public class TestGenray {
    public static void main(String[] args) {
        List<String> list= new ArrayList<>();
        list.add("aaa");
        list.add("bbb");
        print(list);
        List<Student> list1 = new ArrayList<>();
        list1.add(new Student("张三", 10));
        list1.add(new Student("李四", 20));
        print1(list1);


    }

    private static void print1(List<Student> list1) {
        // TODO Auto-generated method stub
        for(Student s:list1){
            System.out.println(s);
        }

    }

    private static void print(List<String> list) {
        // TODO Auto-generated method stub
        for(String s:list){
            System.out.println(s);
        }
    }

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值