1. Arrays的asList和集合构造器:
Arrays.asList() : 调用Arrays类的asList方法将集合转化为List。
改变数组长度的操作是不能用的,因为数组长度是固定的。会抛出异常:
java.lang.UnsupportedOperationException(不支持的操作异常)
package com.zyq.se.collection;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* Author zhaoyq
*/
public class A1_ArrayToListDemo {
public static void main(String[] args) {
String[] arr = {"one","two","three","four","five"};
//1.调用Arrays类的asList方法将集合转化为List
List<String> list= Arrays.asList(arr);
System.out.println("list = " + list);
//2.对该集合的操作就是对原数组对应的操作
list.set(1,"xxx");
System.out.println(" arr = " + Arrays.toString(arr) );
//3.改变数组长度的操作是不能用的,因为数组长度是固定的。
//会抛出异常:java.lang.UnsupportedOperationException(不支持的操作异常)
//list.add("ten");
//4.所有的集合都支持一个参数为Collection类型的构造器,作用是:
// 在创建当前集合的同时 , 包含给定集合中的所有元素
List<String> list2=new ArrayList<>(list);
System.out.println("list2 =" + list2);
list2.add("april");
System.out.println("list2 =" + list2);
}
}
2.Collection的增删查:
package com.zyq.se.collection;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
/**
* author zhaoyq
* Collection的添加, 求长度, 清空方法
*/
public class B1_CollectionDemo1 {
public static void main(String[] args) {
Collection c=new ArrayList();
//1.向当前集合添加一个元素,元素成功添加后返回true。
c.add("one");
c.add("two");
System.out.println(c.add("three"));
c.add("one");
System.out.println(c);
//2. int size(): 返回当前集合的元素个数
int size=c.size();
System.out.println("size = " + size);
//3.boolean isEmpty() 判断当前集合是否为一个空集
boolean isEmpty=c.isEmpty();
System.out.println("isEmpty = " + isEmpty);
//4.boolean contains(Object o)判断当前集合是否包含给定元素:
// 判断依据是该元素是否是否存在equals方法 和 集合现有元素是否存在equals
boolean isContains=c.contains("two");
System.out.println("isContains::" + isContains);
System.out.println(c);
//5.删除元素: 也就是删除与给定元素用equals比较为true的元素
// 对于List而言,重复元素一次只会删除一个重复元素(其他重复元素需要再次删除)。
c.remove("one");
System.out.println(c);
c.remove("one");
System.out.println(c);
//6. void clear() 清空集合
c.clear();
System.out.println(c);
}
}
3.集合只能保存引用类型元素,并且保存的是元素的引用(地址)
//通过p修改age, 然后通过集合co获取元素被修改了 //证明: p变量存储逇是对象的内存引用(内存地址[相关的一个值]), 将其放入集合 //只是将p中的内存引用(内存地址[相关的一个值])放入了集合了。(所以用p修改对象属性发现集合中也 变了)
package com.zyq.se.collection;
import java.util.ArrayList;
import java.util.Collection;
public class B2_CollectionDemo2 {
public static void main(String[] args) {
//集合只能保存引用类型元素,并且保存的是元素的引用(地址)
ArrayList c=new ArrayList();
c.add(1);
c.add(2);
Object obj=c.get(1);
System.out.println("::"+obj.getClass());// System.out.println("::"+obj.getClass());//
class Person{
int age=2;
Person(int a){this.age=a;}
}
//集合只能保存引用类型元素,并且保存的是元素的引用(地址)
Collection co=new ArrayList();
Person p=new Person(20);
co.add( p );
p.age=30;
//通过p修改age, 然后通过集合co获取元素被修改了
//证明: p变量存储逇是对象的内存引用(内存地址[相关的一个值]), 将其放入集合
//只是将p中的内存引用(内存地址[相关的一个值])放入了集合了。(所以用p修改对象属性发现集合中也 变了)
for (Object per: co) {
Person person=(Person)per;
System.out.println( person.age );
}
}
}
/*
//1.测试上个案例的ArrayList类的set方法
List list=new ArrayList();
list.add("aa");
System.out.println(list);
list.set(0, "xx");
System.out.println(list);
*/
4.Collection的remove和contains
元素必须包含equals方法才符合remove和contains的逻辑
package com.zyq.se.collection;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Objects;
/**
* 集合的某些操作会受元素equals方法影响。比如contains()和remove()
* author zhaoYQ
* contains: 判断集合中是否包含元素
* remove: 从集合中删除元素
*/
public class B3_CollectionDemo3 {
public static void main(String[] args) {
class Person{
int age;
Person(int a){
this.age=a;
}
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return age == person.age;
}
public int hashCode() {
return Objects.hash(age);
}
public String toString() {
return "Person{" +"age=" + age +'}';
}
}
Collection c = new ArrayList();
c.add(new Person(1));
c.add(new Person(3));
c.add(new Person(5));
c.add(new Person(7));
c.add(new Person(9));
c.add(new Person(2));
c.add(new Person(1));
/**
* 1.集合类Collection重写了toString方法。格式为:
* [元素1.toString(), 元素2.toString(), 元素3.toString(), ....]
*/
System.out.println("ArrayList集合元素:"+c.toString());
/**
* 2.Collection类的boolean contains(Object o)方法:
* 判断当前集合是否包含给定元素:
* 判断依据是该元素是否是否存在equals方法 和 集合现有元素是否存在equals
*/
Person p=new Person(1);
System.out.println(c.contains( p ));//true (如果Person中没有equals方法就是false )
/**
* 3.删除元素也是删除与给定元素equals比较为true的元素
* 对于List而言,重复元素一次只会删除一次(删除两个相同元素就得删除两次)
*/
c.remove(p);
System.out.println("ArrayList集合元素:"+c.toString());
c.remove(p);
System.out.println("ArrayList集合元素:"+c.toString());
}
}