集合笔记

list接口

定义: public interface Listextends Collection

所有内容允许重复

ArrayList (最常用)

    public static void main(String[] args) {
        //ArrayList : 使用的是数组结构,对于增加删除慢,查找快
        ArrayList<Integer> element = new ArrayList<>(100);
        //初始容量为零
        ArrayList<Integer> element1 = new ArrayList<>();
        //添加算法返回值只为true
        element.add(1);
        element.add(2);
        element.add(3);
        element.add(4);
        element.add(5);
        //get 输出制定下标的值
        System.out.println(element.get(0));
        //indexOf 查找指定对象的位置输出其下标 查找失败返回-1;
        System.out.println(element.indexOf(5));
        //删除指定下标的数
        element.remove(0);
        //修改制定下标的数
        element.set(3,3);
        System.out.println(element.get(0));
        System.out.println(element.get(1));
        System.out.println(element.get(3));
        System.out.println(element.indexOf(5));

    }     

1
4
2
3
3
-1

LinkList 双向列表

Vector

 public static void main(String[] args) {
        //Vector : 使用的是数组结构,增删慢,查找快
        Vector<Integer> element = new Vector<>();
        //添加数组元素
        element.add(111);
        element.add(234);
        element.add(456);
        element.add(789);
        //输出
        System.out.println(element.get(1));
        System.out.println(element.indexOf(234));
        //删去指定下标对应的元素
        element.remove(1);
        //向指定下标添加元素,替换当前元素
        element.set(1,456456);
        System.out.println(element.get(0));
        System.out.println(element.get(1));
        System.out.println(element.indexOf(234));
        System.out.println(element.indexOf(456456));
    }

LinkedList

很少使用作为了解

    public static void main(String[] args) {
        //LinkList 使用的是双向链表结构,增删快,查找慢
        //add
        //remove
        //get
        LinkedList<Integer> element = new LinkedList<>();
//        element.add(123);
//        element.add(234);
//        Integer i = element.removeFirst();
//        System.out.println(i);
         //压栈
        element.push(100);
        element.push(200);

        //弹栈
        Integer i = element.pop();
        System.out.println(i);
    }

itetator

    public static void main(String[] args) {
        ArrayList<Integer> element = new ArrayList<>();
        element.add(1);
        element.add(2);
        element.add(3);
        element.add(4);
        element.add(5);
        ListIterator<Integer> iterator = element.listIterator();
        iterator.add(100);
        iterator.next();
        iterator.next();
        iterator.set(200);
        System.out.println(element.size());

        iterator.previous();
        iterator.previous();
        iterator.previous();
       while(iterator.hasNext()){
           System.out.println(iterator.next());
       }
    }

forEach

//forEach : 增强For循环,最早出现在c
    //用于迭代数组 或 集合
    //语法:
    //for(数据类型 变量名:集合或数组名){}
    public static void main(String[] args) {
        int[] arr = {6, 5, 4, 3, 2, 1};
        for (int data : arr) {
            System.out.println(data);
        }
        System.out.println("----------------------");

        ArrayList<String> element = new ArrayList<>();
        element.add("白日依山尽");
        element.add("黄河入海流");
        element.add("欲穷千里目");
        element.add("更上一层楼"); 
        for (String s:element){
            System.out.println(s);
        }
    }

6
5
4
3
2
1
----------------------
白日依山尽
黄河入海流
欲穷千里目
更上一层楼

set

不包含重复单值的集合

    //HashSet:散列存放(哈希表在学习HashMap时有涉及)
    public static void main(String[] args) {
        HashSet<String> set = new HashSet<>();
        boolean flag1 = set.add("白日依山尽");
        set.add("白日依山尽");
        set.add("黄河入海流");
        set.add("欲穷千里目");
        set.add("更上一层楼");
        boolean flag2 = set.add("白日依山尽");
        System.out.println(flag1+""+flag2);
        for (String s:set){
            System.out.println(s);
        }
        /*Iterator<String> iterator = set.iterator();
        while(iterator.hasNext()){
            System.out.println(iterator.next());
        }*/
    }
}

TreeSet

package Demo4;


import java.util.TreeSet;

public class Demo2 {
    public static void main(String[] args) {
        TreeSet<Person> element = new TreeSet<>();
        Person p1 =new Person("张三",20);
        Person p2 =new Person("柳威",22);
        Person p3 =new Person("李四",22);//不能存储相同的数据
        element.add(p1);
        element.add(p2);
        element.add(p3);
        for(Person p:element){
            System.out.println(p);
        }
    }
    
    static  class Person implements Comparable <Person>{
        private String  name;
        private int age;


        @Override
        public int compareTo(Person o) {
            // this 与 o 比较
            //返回的数据: 负数this小/零一样大/正数this大
            if (this.age>o.age){
                return 1;
            }else if (this.age == o.age){
                return 0;
            }
            return -1;
        }

        public Person() {
        }

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

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

    }
}

List 和 Set 的区别ArrayList 和 LinkedList 的区别是什么?

map

public static void main(String[] args) {
        HashMap<String,String> element = new HashMap<>();
        element.put("1","白日依山尽");
        element.put("2","黄河入海流");
        element.put("3","欲穷千里目");
        element.put("4","更上一层楼");
        Set<String> set = element.keySet();
        for (String s:set){
            System.out.println(s+"+"+element.get(s));
        }
        Collection<String > c = element.keySet();
        for (String a:c){
            System.out.println(a+element.get(a));
        }
    }

HashMap、Hasjtable、ConcurrentHashMap

都是数据的容器(存取删)

多线程、线程安全与否

HashMap : 线程不安全,效率高 不保证存储顺序 (TreeMap 会自动进行排序)

Hashtbable: 线程安全,效率低

ConcurrentHashMap: 采用分段锁机制,保证线程安全,效率又比较高

public class Demo {
    public static void main(String[] args) {
        HashMap<Book,String> element = new HashMap<>();
        Book b1 = new Book("三国演义","打仗");
        element.put(b1,"第一本书");
        Book b2 = new Book("水浒传","梁山好汉");
        element.put(b2,"第二本书");
        System.out.println(element.get(b1));
        b1.setName("西游记");
        System.out.println(element.get(b1));

        Book b3 =new Book("三国演义","打仗");
        System.out.println(element.get(b3));
        //键值不要随便改
    }

    static class Book{
        private String name;
        private  String info;

        public Book(String name, String info) {
            this.name = name;
            this.info = info;
        }

        public Book() {
        }

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

        public String getName() {
            return name;
        }

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

        public String getInfo() {
            return info;
        }

        public void setInfo(String info) {
            this.info = info;
        }

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

        @Override
        public int hashCode() {
            return Objects.hash(name, info);
        }
    }
    
第一本书
null
null

jdk9新特性

public class Demo {
    //JDK 9 集合新特性
    public static void main(String[] args) {
        List<String> list = List.of("白日依山尽","黄河入海流");
        for (String a:list){
            System.out.println(a);
        }
        Set<String> set = Set.of("欲穷千里目","更上一层楼");
        for (String b:set){
            System.out.println(b);
        }
        Map<String,String> map = Map.of("1","床前明月光","2","疑似地上霜");
        Set<String> keySet = map.keySet();
        for (String c:keySet){
            System.out.println(c+"->"+map.get(c));
        }
    }
}

白日依山尽
黄河入海流
更上一层楼
欲穷千里目
1->床前明月光
2->疑似地上霜
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值