java集合概述,List集合

it2022-05-05  153

java的toString方法调用?

public static String valueOf(Object obj) { return (obj == null) ? “null” : obj.toString(); } 根据println使用的一个方法valueOF 对一个对象进行输出得时候,就自动调用toString, 如果没有toString,就输出对象地址 可以通过对调用对象的类写toString的重写方法修改输出内容

集合框架(集合的由来及集合继承体系图)

集合的概念: 对象的容器,存储对象的对象。 集合的特点: 容器的工具类,定义了对多个对象进行操作的常用方法 位置: java.util. Collection体系集合: Interface:Collection 体系结构的根接口,代表一组对象,称为集合,制定List和Set的标准 A:Interface List: 有序,有下标,元素可重复 1.Class:ArrayList 2.Class:LinkedList 3.Class:Vector B:Interface Set: 无序,无下标,元素不可重复 1.Class HashSet 2.Interface SortedSet 为了方便,我们抽象出了AbstractCollection抽象类,它实现了Collection中的绝大部分函数;这样,在Collection的实现类中,我们就可以通过继承AbstractCollection省去重复编码。AbstractList和AbstractSet都继承于AbstractCollection,具体的List实现类继承于AbstractList,而Set的实现类则继承于AbstractSet Collection父接口: 代表一组任意类型对象,无序,无下标 Collection层次结构中的根界面 。 Collection表示一组被称为其元素的对象。 一些Collection允许重复元素,而其他Collection不允许。 JDK不提供此接口的任何直接实现:它提供了更具体的子接口的实现,如Set和List ,此接口通常用于传递collection,并在需要 最大普遍性 的地方操作这些collection collection的方法: add(E e) //E 指object 确保此集合包含指定的元素(可选操作)。 如果此集合由于调用而更改,则返回true 。 (如果此集合不允许重复,并且已包含指定的元素,则返回false。 ) //添加操作

boolean addAll(Collection<? extends E> c) 将指定集合中的所有元素添加到此集合(可选操作)。 如果在操作进行中修改了指定的集合,则此操作的行为是未定义的。 (这意味着如果指定的集合是此集合,此调用的行为是未定义的,并且此集合是非空的。) c1.addAll(c2)//把c1加到c2中

void clear() 从此集合中删除所有元素(可选操作)。

boolean contains(Object o) 如果此集合包含指定的元素,则返回true 。 更正式地,返回true如果且仅当该集合至少包含一个元素e使得(o== null ? e==null : o.equals(e)) 。

boolean isEmpty() 如果此集合不包含元素,则返回 true

boolean remove(Object o) 从该集合中删除指定元素的单个实例(如果存在)(可选操作)。 更正式地,删除元素e ,使得(o== null ? e==null : o.equals(e)) ,如果该集合包含一个或多个这样的元素。 如果此集合包含指定的元素(或等效地,如果此集合由于调用而更改),则返回true 。

Object[] toArray() 返回一个包含此集合中所有元素的数组。 如果此集合对其迭代器返回的元素的顺序做出任何保证,则此方法必须以相同的顺序返回元素。 返回的数组将是“安全的”,因为该集合不保留对它的引用。 (换句话说,这个方法必须分配一个新的数组,即使这个集合是由数组支持的)。 因此,调用者可以自由地修改返回的数组。

此方法充当基于阵列和基于集合的API之间的桥梁。

boolean equals(Object o) 将指定的对象与此集合进行比较以获得相等性。

List集合

List子接口: 有序,有下标,元素可重复 有序collection(也称为序列 )。 该界面的用户可以精确控制列表中每个元素的插入位置。 用户可以通过整数索引(列表中的位置)访问元素,并搜索列表中的元素。 与set不同,列表通常允许重复的元素。 更正式地,列表通常允许元素e1和e2成对使得e1.equals(e2) ,并且如果它们允许空元素,它们通常允许多个空元素 List独有方法 根据List的下标性 void add(int index, E element) 将指定的元素插入此列表中的指定位置(可选操作)。 将当前位于该位置的元素(如果有)和任何后续元素(向其索引添加一个)移动。

E get(int index) 返回此列表中指定位置的元素。

int indexOf(Object o)返回此列表中指定元素的第一次出现的索引,如果此列表不包含元素,则返回-1。 更正式地,返回最低指数i ,使(o== null ? get(i)== null : o.equals(get(i))) ,或-1,如果没有这样的指数

int lastIndexOf(Object o)返回此列表中指定元素的最后一次出现的索引,如果此列表不包含元素,则返回-1。 更正式地,返回最高指数i使得(o==null ? get(i)==null : o.equals(get(i))) ,或-1如果没有这样的索引

E set(int index, E element)用指定的元素(可选操作)替换此列表中指定位置的元素

subList(int fromIndex, int toIndex) 返回此列表中指定的 fromIndex (含)和 toIndex之间的元素

List实现类:

ArrayList(最重要)://可以用数组实现的Arraylist都能用 jdk1.2出现 可调整大小的数组的实现List接口。 实现所有可选列表操作,并允许所有元素,包括null 。 除了实现List 接口之外,该类还提供了一些方法来操纵内部使用的存储列表的数组的大小

ArrayList list = new ArrayList(); boolean list.add(“a”);//Set E get(int index);//get boolean list.remove(“a”)//delete

注意:list.elementData 是私有属性,不可访问 所以使用list.size()来返回数组末尾下标 add函数在使用时把原数组下标移动到新数组下标 初始容量: jdk6:10 jdk7:0 list.add(“a”) list.add(“b”) list.add(“c”) list.add(0,“d”); 此时数组为d,a,b,c//a,b,c后移

list.clear();//所有元素置为null,然后把size置为0;

list.toArray():

Object[] objs=list.toArray()

此时objs将成为一个数组,可以使用数组的方法操作。

ArrayList特点:查询快,增删慢,运行效率快,线程不安全。

Vector jdk1.0出现 Vector类实现了可扩展的对象数组。 像数组一样,它包含可以使用整数索引访问的组件。 但是, Vector的大小可以根据需要增长或缩小,以适应在创建Vector之后添加和删除项目

使用方法与ArrayList相似 特殊构造方法: Vector(int initialCapacity, int capacityIncrement) 构造具有指定的初始容量和容量增量的空向量。

与ArrarList区别

ArrayListVector运行效率快线程不安全运行效率慢线程安全

线性表与链表区别 LinkedList: 以链表结构来实现,空间不连续 只能通过前一元素给出的指针 以指针来访问对应元素 与ArrayList相比更方便添加元素

ArrayList适合查询 LinkedList适合增删

LinkedList list = new LinkedList(); list.add(e); list.add(index,element)

LintedList对开头和结尾可以操作: addFirst(E e) 在该列表开头插入指定的元素。 addLast(E e) 将指定的元素追加到此列表的末尾。 getFirst() 返回此列表中的第一个元素。 getLast() 返回此列表中的最后一个元素。 注意带有last和first的方法

方法区别: list.add(“a”); //collection提供 list.add(2,“b”); //List提供 list.addFirst(“D”);//LinkedList提供


最新回复(0)