首页 > 其他分享 >集合框架

集合框架

时间:2023-03-21 17:12:26浏览次数:28  
标签:框架 Arrays list1 System println 集合 public out

集合框架

1.List接口

2.Set接口

3,Map接口

一、集合的体系

1.Collection接口

也是一种集合,特征:无序,可重复

无序:没有游标

可重复:这个集合当中可以有相同的数据

注意:没有直接的实现类

 Collection<String> list = Arrays.asList(new String[]{
                "a1","b2",
                "b22",
                "c3"
        });

迭代器获取和使用

作用:寻访集合内所有的元素

//获取Iterator接口
        Iterator<String> iter = list.iterator();
        while (iter.hasNext()){
            String item = iter.next();
            System.out.println(item);
        }
package com.mine.demo01;

import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;

public class Main {
    public static void main(String[] args) {
        Collection<String> list = Arrays.asList(new String[]{
                "a1","b2",
                "b22",
                "c3"
        });

        //获取Iterator接口
        Iterator<String> iter = list.iterator();
        while (iter.hasNext()){
            String item = iter.next();
            System.out.println(item);
        }
    }
}


结果:
a1
b2
b22
c3

二、List集合

特点:有序,有重复

1.实现类

(1)ArrayList

是一个基于数组的集合,其扩容策略为0,默认为0,添加第一个元素后直接扩展到10,此后每次扩容50%

常用的API:

package com.mine.demo01;

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

public class Main1 {
    public static void main(String[] args) {
        List<Integer> list1 = new ArrayList<>();
        list1.add(1);
        list1.add(2);
        list1.add(3);
        List<Integer> list2 = new ArrayList<>();
        list2.add(4);
        list2.add(5);
        list2.add(6);
        System.out.println(Arrays.toString(list1.toArray()));//输出list1  //[1, 2, 3]
        System.out.println(Arrays.toString(list2.toArray()));//输出list2  //[4, 5, 6]

        list1.addAll(list2);//将list2集合加到list1集合末尾
        System.out.println(Arrays.toString(list1.toArray()));//[1, 2, 3, 4, 5, 6]

        list1.add(0,-10);//指定位置插入
        System.out.println(Arrays.toString(list1.toArray()));//[-10, 1, 2, 3, 4, 5, 6]
        System.out.println("集合长度:"+list1.size()); //集合长度:7
        //一种快速创建集合的方法
        List list3 = Arrays.asList(new Integer[]{
                100,
                200,
                300
        });

        System.out.println(Arrays.toString(list3.toArray())); //[100, 200, 300]
        list1.addAll(0,list3);//将list3集合插入到list1集合的指定位置
        System.out.println(Arrays.toString(list1.toArray()));//[100, 200, 300, -10, 1, 2, 3, 4, 5, 6]
        //清空集合
//        list1.clear();
//        System.out.println(Arrays.toString(list1.toArray()));//[]

        list1.remove(1);//删除指定位置的元素
        System.out.println(Arrays.toString(list1.toArray()));//[100, 300, -10, 1, 2, 3, 4, 5, 6]

        //判断是否存在某个元素
        System.out.println(list1.contains(300));//true

        //判断是否为空
        System.out.println(list1.isEmpty());//false
        //判断元素位置
        System.out.println(list1.indexOf(300));//1
    }
}

结果:
[1, 2, 3]
[4, 5, 6]
[1, 2, 3, 4, 5, 6]
[-10, 1, 2, 3, 4, 5, 6]
集合长度:7
[100, 200, 300]
[100, 200, 300, -10, 1, 2, 3, 4, 5, 6]
[100, 300, -10, 1, 2, 3, 4, 5, 6]
true
false
1

当集合元素为整数时,删除指定元素可能会出现异常。

迭代器的使用和集合接口(见上方Collection案例)

(2)LinkedList

双向链表:每次扩容增加一个对象,适合进行元素的增减,而不适合进行随机访问

常用API

package com.mine.demo01;

import java.util.Arrays;
import java.util.LinkedList;

public class Main2 {
    public static void main(String[] args) {
        LinkedList<String> linkedList = new LinkedList<>();
        linkedList.addFirst("a");
        linkedList.addLast("z");
        System.out.println(linkedList.getFirst());//a
        System.out.println(linkedList.getLast());//z
        linkedList.removeFirst();//删除首个
        System.out.println(Arrays.toString(linkedList.toArray()));//[z]
        linkedList.removeLast();
        System.out.println(Arrays.toString(linkedList.toArray()));//[]
//        linkedList.removeFirst();
//        linkedList.removeLast();//空集合继续删除会报错

        System.out.println(linkedList.peekLast());//验证不移除
        System.out.println(Arrays.toString(linkedList.toArray()));
        System.out.println(linkedList.pollLast());//验证并移除
        System.out.println(Arrays.toString(linkedList.toArray()));
    }
}


结果:
a
z
[z]
[]
null
[]
null
[]

三、Set集合

特性:

1.无序、不可重复的集合

2.其核心实现类为HashSet

3.HashSet的本质是HashMap的key

1.创建集合

 //创建集合
        Set<String> s = new HashSet<String>();

2.元素的添加(重点)

 //创建集合
        Set<String> s = new HashSet<String>();
        s.add("a");
        s.add("a");
        s.add("a");//只保留了最后一个(通过hash值的比较)
        s.add("b");
        s.add("c");
        System.out.println(Arrays.toString(s.toArray()));

结果:
[a, b, c]

针对对象,可以重写hash来完成一致性判断,而不是重写equals(了解)

package com.mine.demo02;

import java.util.Objects;

public class Person {
    private Integer id;

    public void setId(Integer id){
        this.id = id;
    }

    public Integer getId(){
        return id;
    }

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

    @Override
    public int hashCode() {
        return Objects.hash(id);//自己去设计发生hash碰撞的规则
    }

    @Override
    public String toString() {
        return "Person{" +
                "id=" + id +
                '}';
    }
}

package com.mine.demo02;

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

public class Main1 {
    public static void main(String[] args) {
        //创建集合
        Set<Person> s = new HashSet<>();
        Person p1 = new Person();
        p1.setId(1);
        Person p2 = new Person();
        p2.setId(1);
        s.add(p1);
        s.add(p2);
        System.out.println(Arrays.toString(s.toArray()));
    }
}

结果:
[Person{id=1}]

3.元素的遍历

package com.mine.demo02;

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



public class Main2 {
    public static void main(String[] args) {
        //遍历Set
        Set<String> s = new HashSet<>();
        s.add("a");
        s.add("b");
        s.add("c");
        //通过迭代器
        Iterator<String> iter= s.iterator();
        while (iter.hasNext()){
            String str = iter.next();
            System.out.println(str);
        }

        //通过增强for循环
        for(String str : s){
            System.out.println(str);
        }
    }
}

结果:
a
b
c
a
b
c

四、Map集合

一种可以自行定义检索规则的数据结构,也叫字典

构成:key-Value

注意:

1.null值可以作为key

2.key具有唯一性

3.HashMap的key其本质是数组+链表构成的红黑树

package com.mine.demo02;

import java.util.*;

public class Main3 {
    public static void main(String[] args) {
        Map<String,Object> map = new HashMap<>();
        //存值
        map.put("k1",10);
        map.put("k2",20);
        map.put("k3",30);
        map.put("k3",40);//覆盖前一个值
        //取值
        System.out.println(map.get("k1"));
        System.out.println(map.get("k2"));
        System.out.println(map.get("k3"));

        //判断某个key是否存在
        System.out.println(map.containsKey("k1"));//true
        //判断某个Value是否存在
        System.out.println(map.containsValue(20)); //true

        //有一个特殊的key
        map.put(null,500);
        map.put(null,600);
        map.put(null,700);//覆盖前面的值
        System.out.println(map.get(null)); //700
        //分别获取key和Value的集合
        Set<String> keys = map.keySet();//不可重复
        Collection<?> values = map.values();//可以重复
        System.out.println(Arrays.toString(keys.toArray())); //[null, k1, k2, k3]
        System.out.println(Arrays.toString(values.toArray())); //[700, 10, 20, 40]
    }
}


结果:
10
20
40
true
true
700
[null, k1, k2, k3]
[700, 10, 20, 40]

标签:框架,Arrays,list1,System,println,集合,public,out
From: https://www.cnblogs.com/DFshmily/p/17240638.html

相关文章

  • Hashtable 键值对集合
    usingSystem;usingSystem.Collections;namespaceHashtable_键值对集合{classProgram{staticvoidMain(string[]args){......
  • ArrayList集合对象
    1、ArrayList集合对象usingSystem;usingSystem.Collections;namespaceArrayList集合{classProgram{staticvoidMain(string[]args)......
  • List 泛型集合
     usingSystem;usingSystem.Collections.Generic;namespaceList_泛型集合{classProgram{staticvoidMain(string[]args){......
  • pytest单元测试框架
    一,pytest单元测试框架1.什么是单元测试框架单元测试是指在软件开发当中,针对软件的最小单位(函数,方法)进行正确性的检测测试。2.单元测试框架java: junit和testngpytho......
  • netty网络框架一
    一、netty是什么Netty是一个高性能、异步事件驱动的网络应用程序框架,使用Java编写。它提供了一组简单但功能强大的抽象,使得开发人员可以轻松地开发基于网络协议的客户......
  • nodejs处理一段redis获取集合,数组的代码优化(其中包含:es6同步返回数据的处理,new Pro
    从异步,用延时来处理,改成同步获取数据获取数据主要分2步:1.从redis集合中获取数组;2.遍历数组,抓取其中字符串,解析,拼接成需要的数据,返回给前端原代码,用sleep方法,避免异步......
  • nodejs获取redis集合内容,同步方法
    可以使用redis模块来连接和操作Redis数据库。以下是使用该模块获取Redis集合内容的同步方法://引入redis模块constredis=require('redis');//创建redis客户端const......
  • 框架中处处可见反射的运用,你对它了解多少?
    什么是反射反射是一种能够在程序运行时动态访问、修改某个类中任意属性(状态)和方法(行为)的机制(包括private实例和方法),java反射机制提供了以下几个功能:在运行时判断任意一......
  • 脚本编写的一个通用框架
    总结基于python写脚本的框架#-*-encoding:utf-8-*-#@time:2023/3/2112:11#@author:Maxs_hu"""基于python实现小脚本的基础框架:1.利用yield生成器函数,......
  • Zookeeper——实践操作集合命令
    摘要本博文主要介绍Zookeeper手动执行的一些常用的命令。一、节点增删改查1.1启动服务和连接服务#启动服务bin/zkServer.shstart#连接服务不指定服务地址则默认连接到lo......