首页 > 其他分享 >集合

集合

时间:2024-04-19 15:01:53浏览次数:4  
标签:容器 list1 list 元素 List add 集合

一、注解

image-20230605112613961

image-20230605110622340

image-20230605150509410

类的克隆和序列化要实现接口,这两个接口中没有方法

浅拷贝:拷贝类,不拷贝类的属性,

深拷贝:拷贝类的同时,拷贝类的属性

在java中,我们常认为相同的类用友相同的hashcode

泛型

image-20230605170052354

二、集合

集合分为两大类:单列数据 collection 双列数据 map<key,value>

collection:

​ 有序的数据,可以重复的 list

​ 无序的收据,不可以重复的 set

image-20230606093624816

接口是一种标准

image-20230606094048615

Collection:单列的值

​ List:有序不唯一,底层使用的时动态数组来保存数据的,List集合中的元素是存在下标的,是有固定的顺序,元素可以重复。

​ ArrayList:底层是一个Object类型的数组

​ 创建的时候,空的数组

​ 第一次添加元素的时候,初始化一个长度为10的数组

​ 增长是原来的1.5倍。循环遍历元素的效率高

​ LinkedList:底层是双向链表,插入和删除元素的效率高

​ Vector:底层是一个Object类型的数组,创建的时候。初始化一个长度为10的数组,

​ 增长是原来的两倍

image-20230607141453901

image-20230607141531460

​ Map:底层使用的时key-value这种格式来保存数据,并且是无序的,key是不允许重复的。

​ HsahMap:常用的一个实现类,线程不安全的,效率高

​ LinkedHashMap:有序的,按照存储的顺序取值

​ TreeMap:按照key进行排序的 不能存放null的key

​ HashTable:线程安全类,效率很低,不适用。不能存放null的key和value

三、List集合操作的API

3.1、List集合的创建

List list1 = new ArrayList();
List list2 = new Vector();
List list3 = new LinkedList();

3.2、List集合API操作

给List集合添加元素(add,addAll)

list1.add("admin");
list1.add(10);
list1.add('a');
list1.add(true);
list1.add(2,"guest");

List smallList = new ArrayList();
smallList.add(100);
smallList.add(1000);
list1.addAll(smallList);
list1.addAll(4,smallList);

修改指定元素、获取元素(set、get)

//修改指定元素
list.set(1,"x");
//通过下标获取元素
Object obj = list1.get(1);

List容器中的包含与搜索(contains、containsAll、indexOf、lastIndexOf)

//检查是否包含某个元素
boolean is = list1.contains(100);
//检查是否包含某个指定的集合
is = list1.containsAll(smallList);
//搜索指定的元素,返回下标(没有则返回-1);
int index = list1.indexOd("x");
//反向搜索
index = list1.lastIndexOf('a');

容器迭代器的使用(iterator、listiterator)

所谓迭代器,就是获取容器中元素的一种方式而已:它存在自己比较固定的操作模式
//使用迭代器来获取元素
Iterator it = list1.iterator();
while(it.hasNext()){
    Object value = it.next();
}
//List容器有自己的专属迭代器----这个迭代器的操作方法比较灵活
ListIterator listIt = list1.listIterator();
//listIt.hasNext()  判断是否存在数据(下一行)
//listIt.hasPrevious()  判断是否存在数据(上一行)
while(listIt.hasPrevious()){
    //获取下一行数据
    Object obj = listIt.next();
    //向上进行数据获取
    //listIt.previous()
}

List容器中元素的移除(remove、removeAll)

// 通过指定的元素进行移除
/*
* boolean is = list1.remove("b"); System.out.println(is);
* System.out.println(list);
*/
/*boolean is = list1.remove(new Integer("1")); //复合引用类型的Integer
代表的是移除指定的元素,而不是下标,下标是一个int类型的值;
System.out.println(is);
System.out.println(list);*/
//移除指定的容器
boolean is = list.removeAll(smallList);
System.out.println(is);
System.out.println(list);

如何在List容器中删除自定义的对象元素

package com.it.www.beans;
public class Person {
private String name;
private Integer age;
public Person() {
super();
}
public Person(String name, Integer age) {
    super();
    this.name = name;
    this.age = age;
}
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;
}
//实现的是对象中的属性的值的比较
@Override
    public boolean equals(Object obj) {
        if(obj instanceof Person){
            Person person = (Person)obj;
            if(this.name.equals(person.name)&&this.age==person.age){
                return true;
            }
        }
    return false;
    }
}
public class Demo3 {
    private static List list = new ArrayList();
    private static List smallList = new ArrayList();
    private static Person p1 = new Person("admin",30);
    private static Person p2 = new Person("guest",40);
    static {
        list.add("a");
        list.add("b");
        list.add("c");
        list.add("d");
        smallList.add(1);
        smallList.add(2);
        smallList.add(3);
        list.addAll(smallList);
        list.add(p1);
        list.add(p2);
	}
//针对我们自定义的对象的移除
	public static void test2(){
		System.out.println(list);
		//如何来移除p1这个元素呢?
		//list.remove(p1);
		//在移除对象类型的元素时,内部使用的是equals方法来实现的;
		Person px = new Person("admin",30);
		//当我们重写了Person类中的equals方法(实现的是内容信息的比较)后,通过px可以正常的删除p1这个对象了。
		//结论:说明在List集合中删除指定的自定义对象元素的时候,确实内部是通过equals方法来处理的;
		list.remove(px);
		System.out.println(list);
	}
}

List容器中保留指定容器元素(retainAll)
List容器中的元素截取为另一个List容器
	List list2=list.subList(1, 4); ---[1 4) 下标范围。
List容器转化为Object[ ]
	Object[ ] os=list.toArray();
判断List容器是否为空
	list . isEmpty ();
清空List容器中的所有元素
	list .clear();
List容器中元素的个数
	list .size();

3.3、重点掌握的方法

1、如何创建List容器;
2、如何向容器中添加元素;
3、如何遍历元素 、查找 、 修改元素 、 删除元素 ;
4、List容器的转换----to数组,截取----subList ;
5、作为集合容器的常规操作(清除元素 、 判断是否为空 、 长度大小等);

3.4、链表结构

image-20230613110811255

链表结构的特性:
1、可以很好的保证一个固定的顺序;
2、链表结构保存的数据便于高效的插入元素和删除元素;
3、链表结构保存的数据遍历的效率是相对较低的;

3.5、LinkedList实现类

image-20230613112157247

LinkedList的特性:
1、保证了固定的位置;
2、实现频繁的插入和删除的时候,效率较高;
3、进行遍历的时候,效率较低;

3.6、Vector实现类

Vector实现类的底层也是使用的数组结构,存在下标和ArrayList的特性是一样的,卫笃不同的是基于线程同步的,适用于多线程的环境中,是可以保证数据的安全

public static void main(String[] args) {
        Vector list = new Vector();
        list.addElement("a");
        list.addElement("b");
        list.addElement("c");
        list.addElement("d");
        System.out.println(list);
        Object value = list.elementAt(1);
        System.out.println(value);
            //返回的是一个枚举对象
        Enumeration en = list.elements();
        //有没有更多的元素
        while(en.hasMoreElements()){
            Object obj = en.nextElement();
            System.out.println(obj);
        }
}

3.7、List接口实现类之间的区别

ArrayList:底层采用的数据结构是数组结构。
特点:查询速度快,增删速度稍慢,线程不同步(适用于单线程的环境中)。容量的增长比例为自身的50%。

Vector:底层采用的数据结构是数组结构。
特点:早期版本中使用的一个容器,基于线程同步(适用于多线程的环境中)。容量的增长比例为自身的
100%。现被ArrayList替代。

LinkedList:底层采用的数据结构是链表结构。
特点:增删速度快,查询速度慢。线程不同步(适用于单线程的环境中)。

四、Set集合

标签:容器,list1,list,元素,List,add,集合
From: https://www.cnblogs.com/hardrockstudy/p/18145896

相关文章

  • day16_我的Java学习笔记 (Set、案例、Collections、Map、集合嵌套)
    1.Set系列集合1.1Set系列集系概述1.2HashSet元素无序的底层原理:哈希表JDK1.7HashSet原理解析:JDK1.8HashSet原理解析:1.3HashSet元素去重复的底层原理Set集合去重复的原因,先判断哈希值,再判断equals重写equals()和HashCode()方......
  • Scala 集合(上)
    Scala集合概述集合本质上就是一个用于存储1个到多个数据的容器。在Scala中,集合可以分为三大类:Seq(序列),Set(集合)和Map(映射)。基于这三大类,衍生出来众多的子类序列:元素有序可重复集合:元素无序不可重复映射:键值对结构数据在Scala中,所有的集合都混入了Iterable特质,意味......
  • Scala h集合(下)
    Scala集合字符串Scala中字符串同样分为可变字符串和不可变字符串,不可变字符串使用String来定义,可变字符串使用的是StringBuilder来定义packagecom.fesco.stringobjectStringDemo{defmain(args:Array[String]):Unit={//可变字符串//Scala中既然将......
  • 集合幂级数 ln exp
    写的时候有个地方忘取模调了半天【流汗】先和子集卷积一样处理出size那一维,先对集合幂级数那一维fmt,然后在形式幂级数那一维作\(\mathcal{O}(n^2)\)的暴力ln,exp。写的时候遇到的坑点是集合幂级数那一维的范围其实是\([0,n]\)而不是\([0,n-1]\)。voidfmt(int*f,int......
  • Scala集合
    概述集合本质上就是一个用于存储1个到多个数据的容器。在Scala中,集合可以分为三大类:Seq(序列),Set(集合)和Map(映射)。基于这三大类,衍生出来众多的子类序列:元素有序可重复集合:元素无序不可重复映射:键值对结构数据在Scala中,所有的集合都混入了Iterable特质,意味着所有......
  • 说说你对集合的理解?常见的操作有哪些?
    一、是什么集合(Set),指具有某种特定性质的事物的总体,里面的每一项内容称作元素在数学中,我们经常会遇到集合的概念:有限集合:例如一个班集所有的同学构成的集合无限集合:例如全体自然数集合在计算机中集合道理也基本一致,具有三大特性:确定性:于一个给定的集合,集合中的元素是确定......
  • list集合的排序
    list集合的排序使用常用的sort方法排序和stream流的方式排序packagecom.liucy.meiriyilian.sort;importjava.util.ArrayList;importjava.util.Collections;importjava.util.Comparator;importjava.util.List;importjava.util.stream.Collectors;/***@Authorli......
  • day08_我的Java学习笔记 (String类、ArrayList集合类)
    常用API(String、ArrayList)什么是APIAPI文档下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html1.String简单介绍【补充】:为什么java数据类型String是大写?1.1String类概述1.2String类创建对象的2种方式1.3String......
  • day09_我的Java学习笔记 (ATM系统_理解并学会使用break、return、continue、Random、S
    ATM系统1.项目介绍与功能演示1.1系统准备、首页设计Account.java每个用户的账户信息都是一个对象,需要提供账户类。01.在Account类中定义系统相关的属性信息(卡号、姓名、密码、余额、取现额度)02.定义Getter和Setter方法03.定义有参构造器04.定义无参构造......
  • ES6集合操作
    <!DOCTYPEhtml><html><head> <metacharset="utf-8"> <metaname="viewport"content="width=device-width,initial-scale=1"> <title>ES6数组</title></head><body> <scrip......