Collection —— List集合

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Collection —— List集合相关的知识,希望对你有一定的参考价值。

Collection集合 ———— 存储数据

第一部分(List)

一、数组和集合的区别

1)存储数据

数组:只存储同一种数据类型的元素

集合:可以存储多种类型的元素

2)存储长度

数组:固定长度

集合:可变的,任意添加数据进集合

3)存储类型

数组:可以存储基本数据类型,也可以存储引用数据类型

集合:只能存储引用数据类型

二、Collection接口

jdk不提供此接口的任何直接实现,而是通过子接口的具体类进行实现!

1、实例化

Collection c = new ArrayList();

ArrayList是List接口的子实现类;List接口继承了Collection接口所以通过接口的多态对Collection进行实例化创建对象

2、向集合内添加元素

boolean add(Object obj):只要添加成功就返回true;

boolean addAll(Collection c):将集合c中元素全部添加到集合中,添加成功就返回true;

3、对集合进行操作

1)判断功能:

boolean isEmpty():集合为空则返回true;

boolean contains(Object obj):集合包含obj,则返会true;

boolean containsAll(Collection c):目标集合包含集合c则返回true;

boolean equals(Object obj):判断obj是否与目标集合相等

2)查询集合元素数:

int size():相当与数组的length属性;String的length()方法;

3)删除功能

boolean remove(Object obj):只删除第一个obj,如果删除返会true;

boolean removeAll(Collection c):删除集合c与目标集合共有的元素,至少删除一个元素,才会返回true;

boolean retainAll(Collection c):对一个集合取交集,保留集合c与目标集合共有的元素,至少删除一个元素,才会返回true;

void clear():移除集合中的所有元素

4)转换数组

Object[] toArray():返回值是一个Object类型的数组

注意:不能统一向下转型,如需要遍历数组时候逐个向下转型

4、集合遍历

1)通过toAarray()方法转换成数组,for()循环遍历

Collection c = new ArrayList();

。。。

Object[] obj = c.toArray();

for(int i = 0;i < obj.length;i++){

System.out.println((String)obj[i]);

}

2)通过迭代器遍历

Iterator iterator()返回在此集合的元素上进行迭代的迭代器

接口Iterator方法:

Object next():返回迭代的下一个元素(获取元素)

boolean hasNext():如果仍有元素可以迭代,则返回 true。

Collection c = new ArrayList();

。。。

Iterator it = c.iterator();

while(it.hasNext){

System.out.println(it.next()); //注意在循环体能只能出现一次next()方法

} //否则容易出现NoSuchElementException异常

三、List接口 ———— 继承Collection

1、List集合

1)List集合特点:List集合是一个有序的集合,可以有重复的元素;

2)List子类的特点

ArrayList

底层数据结构是数组,查询快,增删慢,线程不安全,不同步,效率高;

vector

底层数据结构是数组,查询快,增删慢,线程安全,同步,效率低;

LinkedList

底层数据结构数链表,查询慢,增删快,线程不安全,不同步,效率高;

3)list的迭代器

ListIterator listIterator():List列表迭代器

ListIterator接口:

boolean hasNext():表示正向遍历:是否有下一个可以迭代的元素

Object next():获取下一个元素

boolean hasPrevious():表示逆向遍历:是否有上一个可以迭代的元素

Object previous()返回列表中的前一个元素

注意:必须先正向遍历后再逆向遍历,否则无法逆向遍历,没有意义

2、ArrayList类

1)实例化:ArrayList c = new ArrarList();

2)特有功能:

添加功能:

  void add(int index,Object element):在指定位置添加指定的元素

获取功能:

Object get(int index):获取指定位置的元素

删除功能:

Object remove(int index):删除指定位置的元素,返回的就是删除的元素

替换功能:

Object set(int index,object element):将指定位置的元素用element该元素替代,返回的是需要被替代的元素!

3)集合遍历

A:普通for()循环

ArrayList c = new ArrayList();

。。。

for(int i = 0;i < c.size();i++){

System.out.println(c.get(i));

}

B:通过Iterator迭代器遍历(同Collection)

C:通过List特有的listIterator()方法

ArrayList c = new ArrayList();

。。。

ListIterator li = c.listIterator();

while(li.hasNext()){

System.out.println(li.next());

}

3、Vector类

1)实例化: Vector vector = new Vector();

2)特有方法:

添加功能:

  public void addElement(Object obj) ----->boolean add(Object obj)将指定元素添加到此向量的末尾

public Object elementAt(int index) ----->Object get(int index)返回向量中指定位置的元素

public Enumeration elements() ----->Iterator iterator()

接口 Enumeration:

boolean hasMoreElements() ----->hasNext()

Object nextElement() ----->next()

3)集合遍历

A:普通for()循环:利用size(),get()方法

B:通过Iterator迭代器遍历

C:通过List特有的listIterator()方法

D:通过Vector特有的elements()方法

Vector c = new Vector();

。。。

Enumeration e =  c.elements();

while(e.hasMoreElements()){

System.out.println(e.nextElement());

}

4、LinkedList类

1)实例化:LinkedList c = new LinkedList();

2)特有功能:

和添加相关的方法:

  public void addFirst(Object e):将指定元素插入此列表的开头

  public void addLast(Object e):将指定元素添加到此列表的结尾

  和获取相关的方法:

  public Object getFirst():返回此列表的第一个元素。 

  public Object getLast():返回此列表的最后一个元素

  和删除相关的方法:

  public Object removeFirst():删除此列表的第一个元素

  public Object removeLast():删除此列表的最后一个元素

四、ArrayList练习

1、 import java.util.ArrayList;

import java.util.ListIterator;

//需求:给List存储字符串,判断如果这个字符串是"world",然后给集合中添加一个新的 字符串"javaee"?

public class ListTest {

public static void main(String[] args) {

ArrayList al = new ArrayList();

al.add("hello");

al.add("world");

al.add("java");

for(int i = 0;i < al.size();i++){

if(al.get(i) == "world"){

al.add(i + 1, "javaee");

}

}

ListIterator li = al.listIterator();

while(li.hasNext()){

System.out.println(li.next());

}

}

}

sop:         hello

world

javaee

java


2、 import java.util.ArrayList;

import java.util.ListIterator;

//需求:ArrayList去除集合中字符串的重复值(字符串的内容相同)

public class ListDemo {

public static void main(String[] args) {

ArrayList al = new ArrayList();

al.add("aa");

al.add("aa");

al.add("aa");

al.add("bb");

al.add("bb");

al.add("cc");

ArrayList al2 = new ArrayList();

for(int i = 0;i < al.size();i++){

if(!(al2.contains(al.get(i)))){

al2.add(al.get(i));

}

}

ListIterator li = al2.listIterator();

while(li.hasNext()){

System.out.println(li.next());

}

}

}

sop:         aa

bb

cc


3、 import java.util.ArrayList;

import java.util.ListIterator;

/*

* 需求:ArrayList去除集合中字符串的重复值(字符串的内容相同)

* 附件条件:不允许新建集合去完成!

*/

public class ListDemo2 {

public static void main(String[] args) {

ArrayList al = new ArrayList();

al.add("aa");

al.add("aa");

al.add("aa");

al.add("bb");

al.add("bb");

al.add("cc");

for(int x = 0;x < al.size() - 1;x++){

for(int y = x + 1;y < al.size();y++){

if(al.get(x) == al.get(y)){

al.remove(y);

y--;//每删除一次重复元素不给y--的话,角标变化就会漏掉

}

}

}

ListIterator li = al.listIterator();

while(li.hasNext()){

System.out.println(li.next());

}

}

}

sop:         aa

bb

cc

4、 import java.util.ArrayList;

import java.util.ListIterator;

////需求:ArrayList去除集合对象的重复的成员信息(成员变量的值是一样)

public class ListDemo3 {

public static void main(String[] args) {

ArrayList al = new ArrayList();

al.add(new Student("郭嘉",25));

al.add(new Student("荀彧",34));

al.add(new Student("荀彧",34));

al.add(new Student("荀攸",36));

al.add(new Student("郭嘉",25));

al.add(new Student("郭嘉",25));

al.add(new Student("程昱",30));

al.add(new Student("贾诩",42));

ArrayList al2 = new ArrayList();

for(int i = 0;i < al.size();i++){

if(!(al2.contains(al.get(i)))){ //contains()依赖的是equals()方法

al2.add(al.get(i)); //所以使用时要重写equals();

}

}

ListIterator li = al2.listIterator();

while(li.hasNext()){

System.out.println(li.next());

}

}

}

class Student {

private String name;

private int age;

public Student() {

super();

}

public Student(String name, int age) {

super();

this.name = name;

this.age = age;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

@Override

public String toString() {

return "Student [name=" + name + ", age=" + age + "]";

}

@Override

public boolean equals(Object obj) {

if (this == obj)

return true;

if (obj == null)

return false;

if (getClass() != obj.getClass())

return false;

Student other = (Student) obj;

if (age != other.age)

return false;

if (name == null) {

if (other.name != null)

return false;

} else if (!name.equals(other.name))

return false;

return true;

}

}

sop:         Student [name=郭嘉, age=25]

Student [name=荀彧, age=34]

Student [name=荀攸, age=36]

Student [name=程昱, age=30]

Student [name=贾诩, age=42]


以上是关于Collection —— List集合的主要内容,如果未能解决你的问题,请参考以下文章

瞬间教你学会使用java中list的retainAll方法

java 集合重要概念(Collection ,迭代器 增强for)

java 集合重要概念(Collection ,迭代器 增强for)

鸡和框架

如何在 Laravel 中正确合并多个集合

13mybatis一对多resultMap中用collection指定集合的封装规则