Java 集合

目录

一、内部类

1.内部类与外部类

2.匿名局部类

二、集合

1.集合各类接口

 2.Collection

--Collection共性内容

3.List

4.ArrayList与LinkedList

LinkedList

5.Set

--Hash哈希

6.Map

 7.Collections工具类


一、内部类

1.内部类与外部类

//外部类
public class A{
    //内部类:定义在类中的类统称为内部类
    //1.成员内部类:写在类成员位置上
    public class B{
        
    }
    public void cFunc(){
        //2.局部内部类:常用的类型,写在成员函数中
        class C {

        }
    }

}

2.匿名局部类

定义:没有名字的局部内部类

位置: 方法或方法的形参列表中

本质:继承类或者实现接口的匿名子类对象

//抽象父类
public abstract class Person {
    public abstract void study();
}
public class Test {
    public static void main(String[] args){
        //匿名内部类,本质是对象
        new Person(){
            @Override
            public void study() {
                System.out.println("study");
            }
        }.study();
    }
}

二、集合

1.集合各类接口

集合:

1.单列集合顶层接口Collection:

                                                继承

                                               ------>List

                                                               继承

                                                               ------>ArrayList

                                                               ------>LinkedList

                                                               ------>Vector

                                               ------>Set

                                                               ------>HashSet

                                                                                       ------>LinkedHashSet

                                                               ------>TreeSet

2.双列集合顶层接口Map:

                                        继承

                                        ------>HashMap

                                        ------>HashTable

                                        ------>HashTree

 2.Collection

Collection是顶层接口类,含有所有单列集合共性的内容,其子类相应增加特性内容

List接口:有序、可重复

Set接口:无序、唯一

--Collection共性内容

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

//测试Collection接口功能
public class Test {
    public static void main(String[] args){
        //集合的顶层都是接口, 例如: Collection, List, Set, Map
        //故不能直接创建Collection,用其子类ArrayList多态创建
        //泛型<>一般结合集合使用,用于限定数据类型,后面泛型可不写
        Collection <String> ct = new ArrayList<String>();
        ct.add("a");//增加元素
        ct.add("b");
        ct.add("c");
        System.out.println(ct);//ArrayList类重写了toString()

        System.out.println(ct.size());//返回Collection元素个数

        ct.remove("a");//移除元素
        System.out.println(ct);

        System.out.println(ct.isEmpty());//是否为空

        System.out.println(ct.contains("b"));//是否包含元素

        ct.clear();//清空元素
        System.out.println(ct);

        ct.add("a");
        ct.add("b");
        ct.add("c");
        //ct.iterator()会创建一个该类对应的迭代器,该迭代器继承Iterator接口
        //多态创建迭代器对象
        Iterator <String> iterator = ct.iterator();
        while(iterator.hasNext()) {
            //迭代过程不能对Collection进行修改,因为迭代器不知道,会报错
            System.out.println(iterator.next());
        }
        
        //增强for遍历,底层为普通迭代器,也不能对Collection进行修改
        for(String i:collection){
            System.out.println(i);
        }
    }
}

3.List

特点:有序、可重复、有索引

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.Iterator;
import java.util.concurrent.CopyOnWriteArrayList;


public class Test {
    public static void main(String[] args){
        List<String> list = new ArrayList<>();
        list.add("a");//增加元素
        list.add("b");
        list.add("d");
        System.out.println(list);

        list.add(2,"c");  //在指定索引添加元素
        System.out.println(list);

        list.remove(0);//移除指定索引元素
        System.out.println(list);
        
        list.set(0,"a");//修改指定索引元素
        System.out.println(list);
        
        //Collection通用遍历方法,快捷键itit
        Iterator<String> iterator = list.iterator();
        while(iterator.hasNext()){
            System.out.println(iterator.next());
        }
        System.out.println("");

        for(String i:list){
            System.out.println(i);
        }
        System.out.println("");

        //List遍历方法,快捷键itli
        for (int i = 0; i < list.size(); i++) {
            String s =  list.get(i);
            System.out.println(s);
        }
        System.out.println("");

        //List对应迭代器ListIterator
        ListIterator<String> listIterator = list.listIterator();
        while (listIterator.hasNext()) {
            String next =  listIterator.next();
            System.out.println(next);
        }
        System.out.println("");

        while (listIterator.hasPrevious()) {
            String previous =  listIterator.previous();
            System.out.println(previous);
        }
        System.out.println("");

        //ListIterator可以对列表进行操作
        while(listIterator.hasNext()){
            String next = listIterator.next();
            System.out.println(next);
            //在改元素后添加
            if("a".equals(next)){
                listIterator.add("add");
            }
        }
        System.out.println(list);
        System.out.println("");

        for (int i = 0; i < list.size(); i++) {
            String s =  list.get(i);
            System.out.println(s);
            //在列表末尾添加
            if("a".equals(s)){
                listIterator.add("add");
            }
        }
        System.out.println(list);
        System.out.println("");
        
        //用CopyOnWriteArrayList类可在迭代时对列表操作
        CopyOnWriteArrayList<String> copyOnWriteArrayList = new CopyOnWriteArrayList<>();
        copyOnWriteArrayList.add("a");
        copyOnWriteArrayList.add("b");
        copyOnWriteArrayList.add("c");
        Iterator<String> iterator = copyOnWriteArrayList.iterator();
        while (iterator.hasNext()) {
            Object next =  iterator.next();
            System.out.println(next);
            if("a".equals(next)){
                copyOnWriteArrayList.add("d");
            }
        }
        System.out.println(copyOnWriteArrayList);
    }
}

4.ArrayList与LinkedList

ArrayList的特点: 数据结构为数组, 查询和修改快, 增删慢。

LinkedList的特点:数据结构为链表,查询和修改慢,增删快。

ArrayList与List所有的功能类似,不再重复

LinkedList

import java.util.LinkedList;

public class Test {
    public static void main(String[] args){
        LinkedList<String> linkedList = new LinkedList<>();
        linkedList.addFirst("b");
        linkedList.addFirst("a");
        linkedList.addLast("c");
        System.out.println(linkedList);
        System.out.println("");

        System.out.println(linkedList.getFirst());
        System.out.println(linkedList.getLast());
        System.out.println("");

        System.out.println(linkedList.removeFirst());
        System.out.println(linkedList.removeLast());
        System.out.println(linkedList);

    }
}

5.Set

--Hash哈希

Set通过哈希值找到目标对象地址

JDK根据对象的地址值, 或者字符串, 或者数字算出来的int类型的数值为哈希值

类中需要用到哈希值时,子类需要重写hashCode()方法计算哈希值

同种类属性值相同,则计算的哈希值也会相等

import java.util.Objects;

public class Person {
    private String name;
    private int num;

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

    public Person() {
    }

    public String getName() {
        return name;
    }

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

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }

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

    //重写了哈希函数
    @Override
    public int hashCode() {
        return Objects.hash(name, num);
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", num=" + num +
                '}';
    }
}
public class Test {
    public static void main(String[] args){
        Person person1 = new Person("张三",11);
        Person person2 = new Person("张三",11);
        Person person3 = new Person("李四",10);
        System.out.println(person1.hashCode());
        System.out.println(person2.hashCode());
        System.out.println(person3.hashCode());

        //特殊值哈希值相同
        System.out.println("重地abc".hashCode());
        System.out.println("通话abc".hashCode());
        System.out.println("儿女".hashCode());
        System.out.println("农丰".hashCode());
    }
}

6.Map

Map是双列集合的顶层接口, 用来存储键值对对象, 键是唯一的, 值可以重复。

import java.util.*;

public class Test {
    public static void main(String[] args){
        Map<String,String> map = new HashMap<>();
        map.put("张三","2020");
        map.put("李四","2021");
        map.put("王五","2021");
        System.out.println(map);

        System.out.println(map.size());

        System.out.println(map.containsKey("张三"));
        System.out.println(map.containsValue("2021"));

        System.out.println(map.isEmpty());


        System.out.println(map.get("张三"));

        //遍历hashmap
        System.out.println("");
        Set<String> key = map.keySet();
        for(String i:key){
            System.out.println(i);
            System.out.println(map.get(i));
        }
        System.out.println("");

        Collection<String> value = map.values();
        for(String i:value){
            System.out.println(i);
        }
        System.out.println("");

        Set<Map.Entry<String,String>> entrys = map.entrySet();
        for(Map.Entry<String,String> entry:entrys){
            System.out.println(entry.getKey() + entry.getValue());
        }
        System.out.println("");

        map.remove("李四");
        System.out.println(map);

        map.clear();
        System.out.println(map);
    }
}

 7.Collections工具类

import java.util.*;

public class Test {
    public static void main(String[] args){
        ArrayList<Integer> arrayList = new ArrayList<>();
        arrayList.add(11);
        arrayList.add(44);
        arrayList.add(55);
        arrayList.add(22);

        Collections.sort(arrayList);
        System.out.println(arrayList);

        Collections.reverse(arrayList);
        System.out.println(arrayList);

        Collections.shuffle(arrayList);
        System.out.println(arrayList);
        
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值