JAVA :Collection集合

    技术2022-07-10  148

    List接口

    包含vector,ArrayList,Linkedlist 1.有序的集合(存储和取出元素顺序相同) 2.允许存储重复的元素 3.有索引,可以使用普通的for循环遍历

    set接口

    1.不允许存储重复元素 2.没有索引(不能使用普通的for循环遍历) 3.无序的集合(存储和取出元素的顺序有可能不一致)

    Collection接口(set与list接口的父类)

    定义的是所有单列集合中共性的方法 所有的单列集合都可以使用共性的方法 没有带索引的方法

    Iterator迭代器

    常用方法 1.boolean hasNext() 如果仍有元素可以迭代,则返回true 判断集合中还有没有下一个元素,有就返回true,没有就返回false 2.E next() 返回迭代的下一个元素 取出集合中的下一个元素

    使用步骤 1.使用集合中的方法iterator()获取迭代器的实现类对象,使用Iterator接口接收(多态) 2.使用Iterator接口中的方法hasNext判断还有没有下一个元素 3.使用Iterator接口中的方法next取出集合中的下一个元素。

    增强for循环

    1.底层使用的也是迭代器,使用for循环的格式,简化了迭代器的书写 Collectionextends Iterable:所有的单列集合都可以使用增强for public interface Iterable实现这个接口允许对象成为“foreach”语句的目标

    增强for循环:用来遍历集合和数组 格式:for(集合/数组的数据类型 变量名:集合名/数组名){ sout(变量名); }

    泛型

    一种未知的数据类型,当我们不知道使用什么数据类型的时候,可以使用泛型,泛型也可以看出是一个变量,用来接收数据类型。 E e:Element元素 T t:Type类型 ArrayList集合在定义的时候,不知道集合都会存储什么类型的数据,所以类型使用泛型。 当创建集合对象的时候,就会确定泛型的数据类型。(会把数据类型作用参数传递,数据类型赋值给泛型E)

    使用泛型 好处: 1.避免了类型转换的麻烦,存储的是什么类型,取出的就是什么类型 2.把运行期异常(代码运行后会抛出的异常),提升到了编译器(写代码的时候会报错) 弊端: 1.泛型是什么类型,只能存储什么类型的数据 不使用泛型 好处: 1.集合不使用泛型,默认的类型就是Object类型,可以存储任意类型的数据 弊端: 1.不安全,会引发异常

    泛型通配符:? ?代表任意的数据类型 使用方式: 1.不能创建对象使用 2.只能作为方法的参数使用

    List

    接口特点: 1.有序的集合,存储元素和取出元素的顺序是一致的(队列) 2.有索引,包含了一些带索引的方法 3.允许存储重复的元素 对象数组

    一、ArrayList 特点:数组的长度不可以发生改变,但是ArrayList的长度是可以随意变化的. 格式:ArrayList E为泛型,即装在集合中的所有元素,全都是统一的类型。泛型只能是引用类型,不能是基本类型。 原因:集合中只能保存地址值,而基本数据类型没有地址值。 注意: 直接打印ArrayList对象得到的是内容而不是地址值,封装好的。

    常用方法:

    二、LinkedList集合 特点: 1.底层是一个链表结构:查询慢,增删快 2.里面包含了大量操作首尾元素的方法。 注意:使用LinkedList集合特有的方法,不能使用多态。

    Set接口

    1.一个不包含重复元素的Collection。 2.无索引,没有带索引的方法,也不能使用普通的for遍历循环。 3.由哈希表(HashMap实例)支持,查询速度非常快。 4.是一个无序的集合,存储元素和取出元素的顺序有可能不一致

    哈希表

    哈希值:是一个十进制的整数,由系统随机给出(就是对象的地址值,是一个逻辑地址,是模拟出来的地址,不是数据实际存储的物理地址。在Object类中有一个方法,可以获取对象的哈希值。

    int hashcode()返回该对象的哈希码值。

    哈希表 jdk1.8之前:哈希表 = 数组 + 链表 jdk1.8之后:哈希表 = 数组 + 链表 + 红黑树(提高查询速度)

    数组结构:把元素进行分组,相同哈希值的元素是一组 链表/红黑树结构:把相同哈希值的元素连接到一起 (如果链表长度超过8位,就会把链表转换为红黑树 )

    set集合无法存储重复元素的原理 Set集合在调用add方法的时候,add方法会调用元素的hashCode方法和equals方法,判断元素是否重复

    LinkedHashSet

    底层是一个哈希表(数组+链表+红黑树)+链表:多了一条链表(记录元素的存储顺序),保证元素有序

    可变参数

    jdk1.5之后出现的新特性 使用前提: 当方法的参数列表数据类型已经确定,但是参数的个数不确定,就可以使用可变参数 使用格式: 定义方法时使用 修饰符 返回值类型 方法名(数据类型…变量名){} 原理: 可变参数底层就是一个数组,根据传递参数个数不同,会创建不同长度的数组,来存储这些参数,传递的参数个数可以是零个,1,2,3,多个。

    注意事项: 1.一个方法的参数列表,之能有一个可变参数 2,如果方法的参数有多个,那么可变参数必须写在参数列表的末尾

    Collections

    Collections.addall(列表名,多个元素) //添加多个元素 Collections.shuffle(列表名) //随机打乱 Collections.sort(列表名) //默认升序排序 想要对对象进行排序,要对Comparable函数进行重写

    Map集合

    特点: 1.Map集合是一个双列集合,一个元素包含两个值(key:value) 2.Map集合中的元素,key和value可以相同,也可以不同。 3.Map集合中,key是不可以重复的,value是可以重复的。 4.key:value一一对应

    HashMap

    HashMap特点: 1.HashMap集合底层是哈希表,查询的速度特别快 2. 是一个无序的集合,存储元素和取出元素的顺序有可能不一致。

    LinkedHashMap: 1.底层是一哈希表+链表,所以是一个有序的集合

    遍历方式 map集合的第一种遍历方式:通过键找值的遍历方式 map集合的第二种遍历方式:使用Entry对象遍历

    Processed: 0.010, SQL: 9