什么是集合

什么是集合集合 集合与数组之间的区别 共同点 存储多个数据 异同点 数组的特点 是一种引用数据类型 数据是对象数据 是一段连续的内存空间 2 定长 长度一旦确定不可改变 3 所有数据类型相同 4 有序 有索引 根据索引进行操作 集合 1

大家好,我是讯享网,很高兴认识大家。

集合

集合与数组之间的区别

共同点:存储多个数据
异同点
数组的特点:

  1. 是一种引用数据类型,数据是对象数据,是一段连续的内存空间
    2.定长,长度一旦确定不可改变
    3.所有数据类型相同
    4.有序,有索引,根据索引进行操作

集合

1.是一种引用数据类型,数据是对象数据
2.不是定长,长度根据跟随需求对数据进行增删而动态改变
3.可以存储任意引用数据类型
4.有些集合有索引,根据根据索引进行操作,有些集合类型不能跟随索引进行操作

自定义容器类型

 public static void main(String[] args) { 
    //创建一个容器实例 MyContainer my = new MyContainer(); //存储数据 System.out.println(my.size()); my.add("aaa"); System.out.println(my.size()); my.add("bbb"); System.out.println(my.size()); my.add("ccc"); System.out.println(my.size()); System.out.println(my.get(0)); System.out.println(my.get(1)); System.out.println(my.get(2)); System.out.println(my); } } //自定义容器类型 class MyContainer{ 
    //底层存储数据的结构 private String[] elementData; //记录集合中已存储的数据个数 private int size; public MyContainer() { 
    } / * 追加数据 * @param value 要添加的数据 */ public void add(String value) { 
    //判断是否是第一次添加 if(elementData==null && size==0){ 
    //如果是第一次 //1)创建新数组 elementData = new String[1]; //2)value添加到数组中 elementData[0] = value; //3)size+1 size++; return; } //如果不是第一次添加 //1)记录原数组地址 String[] temp = elementData; //2)创建新数组 elementData = new String[size+1]; //3)拷贝数据 //i作为原数组与新数组的索引 for(int i=0;i<size;i++){ 
    elementData[i] = temp[i]; } //4)value添加到数组中 elementData[size] = value; //5)size+1 size++; } / * 根据索引获取数据 * @param index 索引 * @return 对应索引位置的数 */ public String get(int index){ 
    if(index<0 || index>=size){ 
    throw new IndexOutOfBoundsException(index+"索引越界了...."); } return elementData[index]; } / * 返回集合中数据的个数 * @return 已存储的数据个数 */ public int size(){ 
    return size; } @Override public String toString() { 
    return Arrays.toString(elementData); } } 
讯享网

Collection

Collection:集合层次结构中的根接口。集合表示一组对象,称为其元素
常用方法:
遍历方式:

  • foreach
  • iterator迭代器
讯享网 //foreach for (Object o : col1) { 
    System.out.println(o); } //iterator :迭代器 //1)获取迭代器对象(用来遍历指定集合的迭代器实例) Iterator it = col1.iterator(); //2)判断是否存在下一个元素 while(it.hasNext()){ 
    //3)获取下一个元素 System.out.println(it.next()); } 

Set 和 List

set:无序的,不可重复,不可根据索引进行操作
list:有序的,可重复的,可以根据索引进行操作
新增方法
增加了一些与索引操作相关的方法

list集合的遍历方式:

for
foreach
iterator
listiterator

泛型

语法:

<参数类型>

位置:在自定义的时候,如果允许使用泛型,在使用这个类型的时可以为泛型参数具体的数据类型

优点:

规范类型,避免类型转换异常的出现
可以增强程序的稳定性与可读性
便于后期维护

注意:

通过泛型传递数据类型只能传递引用数据类型

ArrayList

List 接口实现类 :

有序的,可重复,可以根据索引进行操作

ArrayList* :
底层结构 数组
特点

根据索引做查询效率高 ,做增删效率低,因为涉及到新数组的创建,原数组数据的拷贝

初始容量

private static final int DEFAULT_CAPACITY = 10;

扩容机制:

int newCapacity = oldCapacity + (oldCapacity >> 1); 每次扩容原容量的1.5倍 通过调用Arrays.copyOf方法实现创建新数组+扩容

- [ ] 注意 : 如果某种类型的底层结构为数组,一般就需要关注初始容量与扩容机制

Vector 与 ArrayList 的区别

共同点 :

底层结构都为数组,特点相同

异同点 :

1.同步问题|线程安全问题
ArrayList是线程不安全|不同步
Vector 是线程安全的,是同步的
如果不需要线程安全实现,建议使用ArrayList代替Vector
2.扩容机制

ArrayList :
初始容量 : 默认10 | 由程序猿自己指定
扩容机制 : 1.5倍
Vector :
初始容量 : 默认10 | 由程序猿自己指定
扩容机制 :
默认扩容原容量的2倍

LinkedList

LinkedList

有序的,可重复,可以根据搜因进行操作的

实现所有可选列表操作,并允许所有元素(包括null )。

底层结构 :

双向链表

特点 :

查询效率低,增删效率高

应用场景 :

适合应用在大量做增删,少量做查询

新增方法 :

遍历方式 :

 for foreach iterator listIterator 

注意 : 请注意,此实现不同步。

MyLinkedList

set

set :无序的,去重的,最多一个null元素;
无序:

存放的顺序与内部真实存储的顺序不保证一致

新增方法
讯享网static <E> Set<E> of(E... elements) 返回包含任意数量元素的不可修改集。 
遍历方式

foreach, iterator

TreeSet

TreeSet:
底层结构:

红黑树(平衡二叉树)

特点

每次过滤一般数据,效率较高,会自动做升序排序;

应用场景:

适合应用在去重的情况下,能够对数据做自动升序排序,相对来说效率较高

新增方法:

新增了一些比较大小相关的方法

遍历

foreach , iterator

请注意,此实现不同步。

定义TreeSet存储字符数据,存储字符数据

根据字符对应的十进制整数确定大小

定义TreeSet,

原因:

TreeSet 会对数据进行默认升序排序,在排序之前就需要先比较大小才能排序,但是TreeSet没有找到对于商品数据的比较规则,就没有办法比较大小,无法排序

解决
内部比较器

内部比较器 | 自然排序 | 自然比较规则|默认比较规则 :

/*这个数据类型实现Comparable<T>接口,重写int compareTo(T o)方法,在方法的内部定义默认比较规则 int compareTo(T o) : 调用compareTo方法能够实现比较大小,实现比较是否相等 两个对象 : x,y 调用 : x.compareTo(y) 返回值 : int类型 0 --> x=y <0 --> x<y >0 --> x>y */ 
外部比较器

外部比较器|定制排序|自定义比较规则:

定义一个实现类,实现类要求实现Comparator接口,重写int compare(T o1, T o2)方法,方法内部定义比较规则

内部比较器与外部比较器结合使用,可以简化代码并且扩展功能

注意
  • TreeSet集合存储数据,根据所存储数据类型的比较规则做去重与排序,跟equals方法无关
  • 方法的形参是接口类型,方法的实现就为接口的实现类对象–>接口多态
  • 当方法的形参类型为函数式接口类型,方法的实现就可以为lambda表达式
小讯
上一篇 2025-03-27 09:55
下一篇 2025-03-07 10:06

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/121816.html