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]

时间: 2024-10-17 11:05:12

Collection —— List集合的相关文章

Backbone Collection——数据模型集合

如果将一个Model对象比喻成数据库中的一条记录,那么Collection就是一张数据表.它表示为一个模型集合类,用于存储和管理一系列相同类型的模型对象. 1.创建集合集合用于组织和管理多个模型,但它并不是必须的,如果你的某个模型对象是唯一的(单例),那么你没必要将它放到集合中. 我们来看一个创建集合的例子: // 定义模型类 var Book = Backbone.Model.extend({ defaults: { name: '' } }); // 定义集合类 var BookList =

Mybatis Collection查询集合只出现一条数据

Mybatis Collection查询集合只出现一条数据 1.原因 如果两表联查,主表和明细表的主键都是id的话,明细表的多条只能查询出来第一条. 2.解决办法 级联查询的时候,主表和从表有一样的字段名的时候,在mysql上命令查询是没问题的.但在mybatis中主从表需要为相同字段名设置别名.设置了别名就OK了. 例子: 主表Standard, 从表StandEntity,均有名为id的字段 <resultMap id="StandardAndEntityResultMap"

Java Collection(集合)简析

类集:在C++中叫做容器(container),而在Java中叫做类集 Collection(类集):最基本的集合接口,一个Collection代表一组Object集合. Collection(类集)特形: 1.  元素(Elements)存放: 可以存放相同的Elements: 不可以存放相同的Elements: 2. 元素(Elements)顺序: 有序: 无序: Collection(类集)优点: 程序处理对象组的方法标准化: 高性能:对基本类集(动态数组,链接表,树和散列表)的实现是高效

Collection单列集合中的常用实现类

Collection 集合层次的根接口 List 有序 有索引 可以重复 ArrayList 底层数据结构是数组 查询快 增删快 线程不安全 效率高 LinkedList 底层数据结构是链表 查询慢 增删快 线程不安全 效率高 Vector 底层数据是数组 查询和增删介于前两者之间 线程安全 效率低 Set 唯一 在调用add()方法时: 在底层中以map的形式存储,存储时调用元素的hashCode(),equals(),map会自动比较key值(就是hash值) 先比较hash值 如果对象的h

Collection单列集合 Map双列集合

Map集合:该集合存储键值对,一对一对往里存.而且要保证键的唯一性. 1.添加 put(K key, V value) putAll(Map<? extends K,? extends V> m) 2.删除 clear() remove(Object key) 3.判断 containsKey(Object key) containsValue(Object value) isEmpty() 4.获取 get(Object key) :获取值 size() values() entrySet(

Collection —— Set集合

第二部分(Set) Set接口 ---- 继承Collection 1.Set集合(是一个不可有重复元素的Collection) 1)Set集合的特点:是无序的(存储和取出不一致),集合中的元素不可以重复 2)Set子实现类的特点 HashSet 它不保证 set 的迭代顺序,特别是它不保证该顺序恒久不变且元素不可以重复 LinkedHashSet(HashSet的子类) 底层数据结构是由哈希表和链表实现,所以它是有序的且元素不可以重复 TreeSet 底层数据结构是一种红黑树数据结构,保证元素

mybatis使用collection查询集合属性规则

接上篇mybatis使用associaton进行分步查询 相关的类还是上篇中的类. 查询部门的时候将部门对应的所有员工信息也查询出来 DepartmentMapper.xml <!--嵌套结果集的方式,使用collection标签定义关联的集合类型的属性封装规则 --> <resultMap type="com.mybatis.bean.Department" id="MyDept"> <id column="did"

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

一的一方College.java: 多的一方Student.java College的sqlmapper文件配置 <resultMap type="com.pxxy.bean.College" id="collegeMap"> <id column="id" property="id"/> <result column="collegeName" property="

Java基础知识强化之集合框架笔记04:Collection集合的基本功能测试

1. Collection集合的基本功能测试: 1 package cn.itcast_01; 2 3 import java.util.ArrayList; 4 import java.util.Collection; 5 6 /* 7 * 集合的由来: 8 * 我们学习的是面向对象语言,而面向对象语言对事物的描述是通过对象体现的,为了方便对多个对象进行操作,我们就必须把这多个对象进行存储. 9 * 而要想存储多个对象,就不能是一个基本的变量,而应该是一个容器类型的变量,在我们目前所学过的知识