JAVA Collection集合接口常用方法总结

JAVA Collection集合接口常用方法总结

目录

1.集合体系
2.Collection集合常用API
	2.1常用方法示例
3.三种遍历方法
	传统方法
	①.迭代器遍历
	②.增强for
	③.lambda表达式
4.存储自定义数据类型
	4.1两种排序方法
		①实现Comparable接口
		②使用Comparator接口
5.List集合常用方法
6.Collections工具类常用方法
7.Map常用方法
8.map遍历方式
	①键找值
	②键值对
	③lambda表达式
9.TreeSet自定义排序方式
10.HashSet去重

注:建议使用CTRL+F搜索关键字 笔记学习自itheima的公开教程

1.集合体系

Collection
	List:添加的元素是有序、可重复、有索引。
		ArrayList
		LinkedList
	Set
		HashSet:无序、不重复、无索引。
			LinkedHashSet:有序、不重复、无索引。
		TreeSet:按照大小默认升序排序、不重复、无索引。

2.Collection集合常用API

public boolean add(E e) // 把给定的对象添加到当前集合中
public void clear() // 清空集合中所有的元素
public boolean remove(E e) // 把给定的对象在当前集合中删除
public boolean contains(Object obj) // 判断当前集合中是否包含给定的对象
public boolean isEmpty() // 判断当前集合是否为空
public int size() // 返回集合中元素的个数
public Object[] toArray() // 把集合中的元素,存储到数组中

2.1常用方法示例

public class Test02 {
    public static void main(String[] args) {

        List<String> list = new ArrayList<>();

        //1.添加
        list.add("张三");
        list.add("李四");
        list.add("王五");

        //打印
        System.out.println(list); // [张三, 李四, 王五]

        //2.删除
        list.remove("张三");
        System.out.println(list); // [李四, 王五]
        //3.判断是否为空
        System.out.println("是否为空:" + list.isEmpty());
        //4.返回元素个数
        System.out.println("元素个数为:" + list.size());
        //5.判断是否存在
        System.out.println("是否存在李四:" + list.contains("李四"));
        //6.存储到数组
        Object[] obj = list.toArray();
        for (Object o : obj) {
            System.out.print(o + " "); // 李四 王五
        }
        //7.清空元素
        list.clear();
        System.out.println(list);
        System.out.println("元素个数为:" + list.size());

    }
}

3.三种遍历方法

传统方法

public class Test02 {
    public static void main(String[] args) {

        List<String> list = new ArrayList<>();

        list.add("张三");
        list.add("李四");
        list.add("王五");

        //传统方法
        for (int i=0; i<list.size(); i++) {
            System.out.print(list.get(i)); // 张三李四王五
        }

    }
}

①.迭代器遍历

public class Test02 {
    public static void main(String[] args) {

        List<String> list = new ArrayList<>();

        list.add("张三");
        list.add("李四");
        list.add("王五");

        //迭代器
        Iterator<String> it = list.iterator();
        while (it.hasNext()) {
            String next = it.next();
            System.out.print(next); //张三李四王五
        }
        
    }
}

②.增强for

public class Test02 {
    public static void main(String[] args) {

        List<String> list = new ArrayList<>();

        list.add("张三");
        list.add("李四");
        list.add("王五");

        //增强for
        for (String s : list) {
            System.out.println(s);
        }
        //张三
        //李四
        //王五
        
    }
}

③.lambda表达式

public class Test02 {
    public static void main(String[] args) {

        List<String> list = new ArrayList<>();

        list.add("张三");
        list.add("李四");
        list.add("王五");

        //lambda表达式
        list.forEach(new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.println(s);
            }
        });

        //简写方式1
        list.forEach( s -> {
            System.out.println(s);
        });
        
        //简写方式2
        list.forEach(System.out::println);

    }
}

4.存储自定义数据类型

首先创建一个用户类,可以自己定义

public class User {
    private String name;
    private Integer age;
    private Double price;

    public User(String name, Integer age, Double price) {
        this.name = name;
        this.age = age;
        this.price = price;
    }

    public String getName() {
        return name;
    }

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

    public Integer getAge() {
        return age;
    }

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

    public Double getPrice() {
        return price;
    }

    public void setPrice(Double price) {
        this.price = price;
    }

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

生成一下构造方法和get和set方法
idea的快捷键是alt+ins

然后在实现类里用之前的遍历方法打印出来

public class Test {

    public static void main(String[] args) {

        List<User> list = new ArrayList<>();

        list.add(new User("张三",18,98.32));
        list.add(new User("李四",11,15.78));
        list.add(new User("王五",36,76.37));
        list.add(new User("赵六",70,1.53));
        list.add(new User("钱七",6,9.85));

        for (User user : list) {
            System.out.print(user.getName() + " ");
            System.out.print(user.getAge() + "岁 ");
            System.out.print(user.getPrice() + "元");
            System.out.println();
        }

        //张三 18岁 98.32元
        //李四 11岁 15.78元
        //王五 36岁 76.37元
        //赵六 70岁 1.53元
        //钱七 6岁 9.85元


    }

}

4.1两种排序方法

①实现Comparable接口

public class User implements Comparable<User> {
    private String name;
    private Integer age;
    private Double price;

    public User(String name, Integer age, Double price) {
        this.name = name;
        this.age = age;
        this.price = price;
    }

    public String getName() {
        return name;
    }

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

    public Integer getAge() {
        return age;
    }

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

    public Double getPrice() {
        return price;
    }

    public void setPrice(Double price) {
        this.price = price;
    }

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

    @Override
    public int compareTo(User o) {
        //return this.age - o.age; //升序
        return o.age - this.age; //降序
    }
}

注意<>里是定义的实体类
然后实现方法

	@Override
    public int compareTo(User o) {
        //return this.age - o.age; //升序
        return o.age - this.age; //降序
    }

之后实现

public class Test {

    public static void main(String[] args) {

        List<User> list = new ArrayList<>();

        list.add(new User("张三",18,98.32));
        list.add(new User("李四",11,15.78));
        list.add(new User("王五",36,76.37));
        list.add(new User("赵六",70,1.53));
        list.add(new User("钱七",6,9.85));

        Collections.sort(list);

        for (User user : list) {
            System.out.print(user.getName() + " ");
            System.out.print(user.getAge() + "岁 ");
            System.out.print(user.getPrice() + "元");
            System.out.println();
        }



    }

}

②使用Comparator接口

public class Test {

    public static void main(String[] args) {

        List<User> list = new ArrayList<>();

        list.add(new User("张三",18,98.32));
        list.add(new User("李四",11,15.78));
        list.add(new User("王五",36,76.37));
        list.add(new User("赵六",70,1.53));
        list.add(new User("钱七",6,9.85));


        list.sort(new Comparator<User>() {
            @Override
            public int compare(User o1, User o2) {
                //return Double.compare(o1.getPrice(),o2.getPrice()); //升序
                return Double.compare(o2.getPrice(),o1.getPrice()); //降序
            }
        });

        for (User user : list) {
            System.out.print(user.getName() + " ");
            System.out.print(user.getAge() + "岁 ");
            System.out.print(user.getPrice() + "元");
            System.out.println();
        }
        
    }

}

5.List集合常用方法

public class List01 {
    public static void main(String[] args) {

        List<String> list = new ArrayList<>();

        list.add("张三");
        list.add("李四");
        list.add("王五");

        //在某个索引位置插入元素
        list.add(1,"赵六"); // 在李四前插入
        System.out.println(list); // [张三, 赵六, 李四, 王五]

        //删除元素
        list.remove("李四");
        System.out.println(list); // [张三, 赵六, 王五]
        list.remove(2);
        System.out.println(list); // [张三, 赵六]

        //获取元素
        System.out.println(list.get(0)); // 张三

        //修改元素
        System.out.println(list.set(0, "零零零")); // 张三
        System.out.println(list); // [零零零, 赵六]

        System.out.println("-------");

        // 遍历 之前的三种
        // 原始方式
        for(int i=0; i<list.size(); i++) {
            System.out.println(list.get(i));
        }


    }
}

6.Collections工具类常用方法
排序功能和4.1的List排序相同

public class CollectionsTest {
    public static void main(String[] args) {

        List<Integer> list = new ArrayList<>();

        //批量添加元素
        Collections.addAll(list,18,21,33,64,98,82);
        //打乱集合元素
        Collections.shuffle(list);
        System.out.println(list); // [33, 98, 18, 64, 82, 21]
        //排序
        Collections.sort(list);
        System.out.println(list); // [18, 21, 33, 64, 82, 98]

    }
}

7.Map常用方法

public class MapTest {
    public static void main(String[] args) {

        Map<Integer,String> map = new HashMap<>();

        map.put(5,"张三");
        map.put(2,"李四");
        map.put(6,"王五");

        //根据键删除键值对应的元素
        map.remove(5);
        //判断集合是否包含 指定的键 / 值
        System.out.println(map.containsKey(5)); //false
        System.out.println(map.containsValue("王五")); //true

        System.out.println(map); //{2=李四, 6=王五}

        //是否为空
        System.out.println(map.isEmpty()); //false
        //获取集合大小
        System.out.println(map.size()); //2


        //根据键获取值
        System.out.println(map.get(2)); //李四

        //获取全部键的集合
        Set<Integer> keySet = map.keySet();
        System.out.println(keySet); //[2, 6]
        //获取全部的值的集合
        Collection<String> values = map.values();
        System.out.println(values); //[李四, 王五]


        Map<Integer,String> map2 = new HashMap<>();

        map2.put(5,"张三");
        map2.put(8,"李四");
        map2.put(12,"七七");
        map2.put(99,"八八");

        map.put(5,"张三");
        System.out.println(map); //{2=李四, 5=张三, 6=王五}
        map.putAll(map2);
        System.out.println(map);
        //{2=李四, 99=八八, 5=张三, 6=王五, 8=李四, 12=七七}

        // 键不能重复 值可以重复
        

    }
}

8.map遍历方式

①键找值

public class Test {
    public static void main(String[] args) {

        Map<Integer,String> map = new HashMap<>();

        map.put(5,"张三");
        map.put(2,"李四");
        map.put(6,"王五");

        // 一 、键找值
        // 1.拿到集合的全部键
        Set<Integer> keys = map.keySet();
        // 2.遍历每个键 根据键提取值
        for (Integer key : keys) {
            String s = map.get(key);
            System.out.println(key + " " + s);
        }



    }
}

②键值对

public class Test2 {
    public static void main(String[] args) {

        Map<Integer,String> map = new HashMap<>();

        map.put(5,"张三");
        map.put(2,"李四");
        map.put(6,"王五");

        //2.键值对

        //把map集合转为set集合
        Set<Map.Entry<Integer, String>> entries = map.entrySet();

        //遍历取值
        for (Map.Entry<Integer, String> entry : entries) {
            //System.out.println(entry);
            //2=李四
            //5=张三
            //6=王五

            Integer key = entry.getKey();
            String value = entry.getValue();
            //System.out.print(key + " "); 2 5 6
            //System.out.print(value + " "); 李四 张三 王五
            System.out.println(key + " " + value);
            //2 李四
            //5 张三
            //6 王五
        }

        //System.out.println(entries); [2=李四, 5=张三, 6=王五]

    }
}

③lambda表达式

public class Test3 {
    public static void main(String[] args) {

        Map<Integer,String> map = new HashMap<>();

        map.put(5,"张三");
        map.put(2,"李四");
        map.put(6,"王五");

        //简写
        map.forEach( (key,value) -> System.out.println(key +"--"+ value) );
        //2--李四
        //5--张三
        //6--王五

        //3. lambda表达式
        map.forEach(new BiConsumer<Integer, String>() {
            @Override
            public void accept(Integer integer, String s) {
                //System.out.println(integer + " " + s);
                //2 李四
                //5 张三
                //6 王五

                System.out.println(integer); //2 5 6

            }
        });


    }
}

9.TreeSet自定义排序方式

还有一种实现Comparable接口如4.1所示

public class TreeSetTest {
    public static void main(String[] args) {

        Set<User> set = new TreeSet<>(new Comparator<User>() {
            @Override
            public int compare(User o1, User o2) {
                //return Double.compare(o1.getPrice(), o2.getPrice());
                return o1.getAge() - o2.getAge() >= 0 ? 1 : -1;
            }
        });

        set.add(new User("张三",18,9.9));
        set.add(new User("李四",17,8.9));
        set.add(new User("王五",16,7.9));
        set.add(new User("赵六",15,6.9));
        set.add(new User("七七",15,14.3));


        for (User user : set) {
            System.out.println(user);
        }
        //User{name='赵六', age=15, price=6.9}
        //User{name='王五', age=16, price=7.9}
        //User{name='李四', age=17, price=8.9}
        //User{name='张三', age=18, price=9.9}

    }
}

10.HashSet去重

重写hashCode()和equals()方法即可

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值