首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java 集合深入理解(4):List 接口

Java 集合框架中最常使用的几种 List 实现类是 ArrayList,LinkedList 和 Vector。在各种 List 中,最好的做法是以 ArrayList 作为默认选择。...为什么 List 中的元素 “有序”、“可以重复”呢? 首先,List 的数据结构就是一个序列,存储内容时直接在内存中开辟一块连续的空间,然后将空间地址与索引对应。...List 接口定义的方法 List 中除了继承 Collection 的一些方法,还提供以下操作: 位置相关:List 和 数组一样,都是从 0 开始,我们可以根据元素在 list 中的位置进行操作,比如说...public boolean equals(Object o) { return this == o; } 因此和 Set,Map 一样,List 中如果想要根据两个对象的内容而不是地址比较是否相等时...) 作用同上,不同的是当 参数 array 的长度比 List 的元素大时,会使用参数 array 保存 List 中的元素;否则会创建一个新的 数组存放 List 中的所有元素; ArrayList

1.2K100
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Java 集合深入理解:List 接口

    List 接口 一个 List 是一个元素有序的、可以重复、可以为 null 的集合(有时候我们也叫它“序列”)。...为什么 List 中的元素 “有序”、“可以重复”呢? 首先,List 的数据结构就是一个序列,存储内容时直接在内存中开辟一块连续的空间,然后将空间地址与索引对应。...List 接口定义的方法 List 中除了继承 Collection 的一些方法,还提供以下操作: 位置相关:List 和 数组一样,都是从 0 开始,我们可以根据元素在 list 中的位置进行操作,比如说...public boolean equals(Object o) { return this == o; } 因此和 Set,Map 一样,List 中如果想要根据两个对象的内容而不是地址比较是否相等时...) 作用同上,不同的是当 参数 array 的长度比 List 的元素大时,会使用参数 array 保存 List 中的元素;否则会创建一个新的 数组存放 List 中的所有元素; ArrayList

    52850

    java集合【2】——— Collection接口详解

    之所以需要这样一个接口,是因为java作为面向对象,总是避免不了处理多个对象的情况,要处理多个对象,首先需要容器存储,这个容器就是集合。...最常见的三个实现类就是ArrayList,Vector,LinkedList,ArrayList和Vector都是内部封装了对数组的操作,唯一不同的是,Vector是线程安全的,而ArrayList不是.../在指定位置插入元素 E remove(int index);//根据索引移除某个元素 int indexOf(Object o); //根据对象获取索引 int lastIndexOf(Object...底层是哈希表,一个元素为链表的数组 LinkedHashSet HashSet的子类 有顺序 底层由哈希表组成 TreeSet 如果无参数构建Set,则需要实现Comparable方法。...Collection接口继承了Iterable接口,而Map则不是,Map是在各自的实现类中才用内部类的方式实现Iterator接口,例如HashMap,key或者value或者它们的组合entry都可以使用迭代器进行遍历

    1.1K21

    LinkedList 源码分析

    实现 这个类实现的接口比较多,具体如下: 首先这个类是一个 List 自然有 List 接口 然后由于这个类是实现了 Deque 这个接口是双端队列的接口,所以说它是具有双端队列的特性的。...构造方法分析 只有两个构造方法。其中一个是默认的空构造也就是生成一个空的 LinkedList 另外一个就是接受一个 Collection 接口。里面调用了 PutAll 方法。...主要方法分析 1. add 这个方法就直接调用了 linkLast 而 linkLast 里面就是直接把元素添加到元素的结尾。...这个方法和上面的方法实现的方式一样的,但是注意这个方法的意思是找到最后一个与之匹配的元素,他并不是从头开始找,而是直接从尾节点开始遍历。...9. push/pop 底层的方法就是 addFirst 和 removeFirst 10. remove(noargs)/remove(E e) 无参的调用 removeFirst 有参数的就是去查找然后删除

    51440

    泛型接口,泛型类和泛型通配符

    那为什么继承的时候也要确定泛型呢?因为继承就是在使用一个已经定义好的类,使用泛型类,就要指定类型。 3.用什么样的参数形式来接受List这种形式的参数?...现在需要为所有List抽象一个方法,不论给的参数是List,List,都可以接收并且打印List中的元素。是不是理所当然的想到了ListObject>?...显然这样是不可以的,错误提示参数类型不匹配,Object是所有类型的父类,但是ListObject>并不是List的父类,那应该使用什么方法达到上面的要求呢?...List提供的add(E e)方法是需要指定类型的,这里不是E吗?这是个泛型类型啊?为什么要提供类型?因为这是定义,一旦要使用add(E e)方法,必须指定具体的类型。...如果我使用List作为参数,传入到printAllObject方法,运行完打印元素的语句后,会往List类型的集合里面新增一个Object类型的对象,而Object又是Book类型的父类

    2.3K20

    java集合【6】-- Collection源码解析

    之所以需要这样一个接口,是因为java作为面向对象,总是避免不了处理多个对象的情况,要处理多个对象,首先需要容器存储,这个容器就是集合。...最常见的三个实现类就是ArrayList,Vector,LinkedList,ArrayList和Vector都是内部封装了对数组的操作,唯一不同的是,Vector是线程安全的,而ArrayList不是.../在指定位置插入元素 E remove(int index);//根据索引移除某个元素 int indexOf(Object o); //根据对象获取索引 int lastIndexOf(Object...底层是哈希表,一个元素为链表的数组 LinkedHashSet HashSet的子类 有顺序 底层由哈希表组成 TreeSet 如果无参数构建Set,则需要实现Comparable方法。...Collection接口继承了Iterable接口,而Map则不是,Map是在各自的实现类中才用内部类的方式实现Iterator接口,例如HashMap,key或者value或者它们的组合entry都可以使用迭代器进行遍历

    52930

    Java基础系列(四十一):集合之List

    前言 List是继承自Collection的一个子接口,它提供了一个有序的集合,在这个集合中我们可以使用索引去获取集合中的值,同时,我们也可以通过迭代器去访问集合中的元素,第一种方法被称为随机访问,因为我们可以按照任意的顺序去访问元素...int indexOf(Object o); int lastIndexOf(Object o); // List Iterators ListIterator...remove(int index):删除指定索引(index)位置的元素,并将处于该位置后面的元素索引减1 indexOf(Object o):获取对象o在集合中的索引 lastIndexOf(Object...replaceAll(UnaryOperatorE> operator)这里和String类中replaceAll()方法并不相同,这里的接收参数是一个函数式接口,我们来看一下这个函数式接口的源码:...super E> c)传入的同样是一个函数式接口,我们可以自定义排序规则后,调用这个方法进行排序: List humans = Lists.newArrayList(new Human("

    36110

    (38) 剖析ArrayList 计算机程序的思维逻辑

    public int lastIndexOf(Object o) 从后往前找。 public boolean contains(Object o) 是否包含指定元素。...(int index); int indexOf(Object o); int lastIndexOf(Object o); ListIteratorE> listIterator(); ListIterator...比如说,Collections类中有一个方法binarySearch,在List中进行二分查找,它的实现代码就根据list是否实现了RandomAccess而采用不同的实现机制,如下所示: public...,这个方法返回的List,它的实现类并不是本节介绍的ArrayList,而是Arrays类的一个内部类,在这个内部类的实现中,内部用的的数组就是传入的数组,没有拷贝,也不会动态改变大小,所以对数组的修改也会反映到...作为程序员,就是要理解每种数据结构的特点,根据场合的不同,选择不同的数据结构。

    95550

    Oracle Java Numbers和Strings

    ---- 使用“Number”对象而不是基元有三个原因: 作为需要对象的方法的参数(通常在处理数字集合时使用)。...boolean equals(Object obj) 确定此数字对象是否等于参数。如果参数不是“null”,并且是具有相同类型和数值的对象,则方法返回“true”。...“format()”方法(“DecimalFormat”继承自“NumberFormat”)随后由“myFormatter”调用-它接受“double”值作为参数,并以字符串形式返回格式化的数字: 下面是一个示例程序...值作为基元类型而不是“Integer”对象添加到“li”中,但代码仍会编译。...因为“li”是“Integer”对象的列表,而不是“int”值的列表,所以您可能会想为什么Java编译器不会发出编译时错误。

    23400

    Java集合类详解

    所有实现Collection接口的类都必须提供两个标准的构造函数:无参数的构造函数用于创建一个空的Collection,有一个 Collection参数的构造函数用于创建一个新的Collection,这个新的... T[] *All方法参数的类型都为Collection ,大多数方法都是返回boolean类型值,Collection 接口用于表示任何对象或元素组。...Collection,表示映射而不是真正的集合。   ...● HashMap不是同步的,而Hashtable是同步的。   ● 迭代HashMap采用快速失败机制,而Hashtable不是,所以这是设计的考虑点。   ...或者说为什么我们应该一直使用ArrayList而不是Vector   你应该使用ArrayList而不是Vector是因为默认情况下你是非同步访问的,Vector同步了每个方法,你几乎从不要那样做,通常有想要同步的是整个操作序列

    94020

    刷算法,这些api不可不知!

    类/接口 描述 方法 String 字符串 charAt toCharArray split substring indexOf lastIndexOf replace length List...List b = new ArrayList(a); //接受一个集合容器 get get(int index) // 返回元素位置在index的元素e --- array...如果你在调用了sublist返回了子list之后,如果修改了原list的大小,那么之前产生的子list将会失效,变得不可使用 集合工具 Collections是集合工具类,提供了一些操作集合的方法。...--- O(m * n) m为原串长度, n为str长度 // (假如要找一个字符char c,str可以表示成String.valueOf(c),然后作为参数传进去....--- O(m * n) m为原串长度, n为str长度 // (假如要找一个字符char c,str可以表示成String.valueOf(c),然后作为参数传进去.

    51210

    Java基础总结大全(2)

    **数组长度固定,而集合长度是可变的 **数组值可以存储对象,还可以存储基本数据类型;而集合只能存储对象 **数组存储数据类型是固定的,而集合存储的数据类型不固定 (3)集合类的特点: 集合只能存储对象...*****List集合子类及其方法 (1)List接口是Collection接口的一个子接口。...(2)List接口中的元素有如下特点(对角标的操作都是特有方法,因为有序): A:元素有序(存储顺序和取出顺序一致) B:元素可以重复 (3)List接口中的特有方法 A:add(int index...index):获取指定位置的元素 E:indexOf(Object obj):获取指定元素的位置 F:subList(int start,int end):从一个大的List中截取一个小的List...G:listIterator():返回一个List接口特有的迭代器 (1)、ArrayList: |--->构造方法摘要:(少用,不是重点) ArrayList():构造一个初始容量为 10

    1.5K90

    Kotlin入门潜修之类和对象篇—泛型及其原理

    extends E> c); 我们发现addAll方法入参的泛型定义实际上是E>这个类型,而不是E>这个类型。这就引出了java中的通配符(使用?表示)概念。...> list) { //在该方法中测试添加对象,实际上测试的是无界通配符作为类泛型参数的场景,因为list的类型是泛型List即List list) { //在该方法中测试添加对象,list.add实际上测试的是通配符作为类泛型参数的场景,因为list的类型是泛型List类即List list) { //在该方法中测试添加对象,list.add实际上测试的是通配符作为类泛型参数的场景,因为list的类型是泛型List类即ListE>修饰时是协变的,或者说E是个协变类型参数;IList是E的生产者,而不是E的消费者。 什么是协变?

    93830

    java集合源码分析(二):List与AbstractList

    List 中的 add() 参数的(int,E),而 Collection 中的 add() 参数是 E,因此 List 集合中同时存在指定下标和不指定下标两种添加方式; remove():删除指定下标的元素...注意,List 的 remove() 参数是 int ,而 Collection 中的 “remove()` 参数是 Objce,也就是说,List 中同时存在根据元素是否相等和根据元素下标删除元素两种方式...,就立刻抛出异常,而不是让可能出错的参数被使用从而引发不可预知的错误。...面对迭代期间的并发修改,这提供了快速失败的行为,而不是不确定的行为。 子类对此字段的使用是可选的。...接口,新增方法的特点主要体现在可以通过下标去操作节点,可以说大部分下标可以作为参数的方法都是 List 中添加的方法。

    34920
    领券