一、常用方法
- boolean add(E e)
确保此集合包含指定的元素(可选操作)。 - int size()
返回此集合中的元素数。 - void clear()
从此集合中删除所有元素(可选操作)。 - Object[ ] toArray()
返回一个包含此集合中所有元素的数组。 - boolean isEmpty()
如果此集合不包含元素,则返回 true 。
import java.util.ArrayList;
import java.util.Collection;
class Customer{
String name;
int age;
Customer(String name,int age){
this.age = age;
this.name = name;
}
public String toString(){
return "Customer[name="+name+"age="+age+"]";
}
}
public class CollectionTest01 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//1.创建集合
//Collection c = new Collection(); 写法错误,接口不能new,需借助实现类
Collection c = new ArrayList(); //利用多态
//2.添加元素
c.add(1); //自动装箱
c.add(new Integer(100));
Object o = new Object();
c.add(o); //Collection集合只能单个存储元素
Customer cust = new Customer("张三",20);
c.add(cust);
//3.将集合转换成Object类型数组
Object[] objs = c.toArray();
//遍历该数组
for(int i=0;i<objs.length;i++){
System.out.println(objs[i]);
}
//4.获取元素的个数
System.out.println(c.size()); //4
System.out.println(c.isEmpty()); //false
//5.清空元素
c.clear();
System.out.println(c.size()); //0
System.out.println(c.isEmpty()); //true
}
}
- Iterator iterator()
返回此集合中的元素的迭代器。
通过迭代器中方法完成集合的迭代(遍历)。
在之前的这张图中左上角部分描述过迭代器
注意:这种方式是所有的集合通用的便利方式。
import java.util.*;
public class CollectionTest02 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//创建集合对象
Collection<Comparable> c = new LinkedList<Comparable>();
//添加元素
c.add(10);
c.add(3.14);
c.add(true);
//迭代
//1.获取迭代对象
Iterator<Comparable> it = c.iterator();
System.out.println(it); //java.util.AbstractList$Itr是ArrayList集合所依赖的迭代器
//java.util.LinkedList$ListItr是LinkedList集合所依赖的迭代器
//Itr 、ListItr是内部类
//迭代器是面向接口编程,it是引用,保存了内存地址,指向堆中的"迭代器对象"
//2.遍历集合调用Collection内部方法
while(it.hasNext()){
Object element = it.next();
System.out.println(element);
}
/*
boolean b = it.hasNext(); 判断是否有更多的元素
Object element = it.next(); 将迭代器下移一位,并且取出指向的元素
原则:it.next()之前必须先调用it.hasNext()方法,防止出现空指针异常
*/
/*for(Iterator<Comparable> it1 = c.iterator();it.hasNext();){
Object element1 = it.next();
System.out.println(element1);
}
*/
}
}
-
boolean contains(Object o)
如果此集合包含指定的元素,则返回 true 。 -
boolean remove(Object o)
从该集合中删除指定元素的单个实例(如果存在)(可选操作)。 -
存储在集合中的元素应该去重写equals方法
import java.util.*;
public class CollectionTest03 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//创建集合
Collection c = new ArrayList();
//创建Integer类型的对象
Integer i1 = new Integer(10);
//添加对象
c.add(i1);
//判断集合中是否包含对象i1
System.out.println(c.contains(i1)); //true
//再创建一个Integer对象
Integer i2 = new Integer(10);
//删除
c.remove(i2);
System.out.println(c.size()); //0
//判断集合中是否包含对象i2
System.out.println(c.contains(i2)); //true
//这就涉及到之前学的整型常量池,所以i1就是i2
//并且contains方法底层调用的是equals方法
//创建Manager对象
Manager m1 = new Manager(100,"张三");
//添加对象
c.add(m1);
//判断集合中是否存在对象m1
System.out.println(c.contains(m1)); //true
//再添加一个Manager对象
Manager m2 = new Manager(100,"张三");
//判断集合中是否存在对象m2
System.out.println(c.contains(m2));
//删除
c.remove(m2);
System.out.println(c.size()); //0
//重写equals方法之前
//System.out.println(c.contains(m2)); false
//重写equals方法之后
//System.out.println(c.contains(m2)); true
}
}
class Manager{
int no;
String name;
Manager(int no,String name){
this.no = no;
this.name = name;
}
//重写equals方法
public boolean equals(Object o){
if(this==o) return true;
if(o instanceof Manager){
Manager m = (Manager)o;
if(m.no==this.no && m.name.equals(this.name)){
return true;
}
}
return false;
}
}
二、深入remove方法
1.迭代器的remove方法
2.集合本身的remove方法
import java.util.*;
public class CollectionTest04 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//创建一个集合
Collection c = new ArrayList();
//添加元素
c.add(1);
c.add(2);
c.add(3);
//获取迭代器遍历
Iterator it = c.iterator();
while(it.hasNext()){
//推荐使用迭代器自身的remove方法
it.next();
//删除
it.remove();
/*
//使用集合本身的remove方法删除
Object element = it.next();
//删除
c.remove(element);
这种方式需要在每一次删除后重新获取新的迭代器
*/
}
System.out.println(c.size()); //0
}
}
三、Collection与Collections的比较
java.util.Collections; 集合工具类
java.util.Collection; 集合接口
1.Collections 是集合工具类,用来对集合进行操作。部分方法如下
-public static <T> boolean addAll(Collection<T>c,T...elements)//往集合中添加一些元素
-public static void shuffle(List<?> list) //打乱集合顺序
-public static <T> void sort(List<T> list) //对集合进行排序,默认为升序
注意:
- sort使用前提:被排序的集合里边存储的元素,必须实现Comparable,重写接口中的方法compareTo定义排序的规则
- sort使用范围
适用于List,若为其他类型,需要将其强制类型转换
2.Comparable接口的排序规则:
// 自己(this)-参数:升序
public static <T>void sort(List<T> list, Comparator<? super T>):
//将集合中元素按照指定规则排序
3.Comparator和Comparable的区别
Comparable:自己(this)和别人(参数)比较,自己需要实现Comparable接口,重写比较的规则compareTo方法
Comparator:相当于找一个第三方的裁判,比较两个
Comparator定义排序规则: o1-o2 升序,反之降序
import java.util.*;
public class CollectionsTest01 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//使用Collections工具完成集合的排序
List l = new ArrayList();
//添加元素
l.add(10);
l.add(60);
l.add(20);
l.add(40);
l.add(30);
//遍历
for(int i = 0; i < l.size(); i++){
System.out.println(l.get(i));
}
System.out.println("=================");
//完成集合的排序
Collections.sort(l);
//遍历
for (int i = 0; i < l.size(); i++) {
System.out.println(l.get(i));
}
System.out.println("=================");
//给定一个set集合
Set s = new HashSet();
//添加元素
s.add(15);
s.add(35);
s.add(55);
s.add(25);
s.add(45);
/*
Collections.sort(s);
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The method sort(List<T>) in the type Collections is not applicable for the arguments (Set)
*/
//进行强制类型转换
List lists = new ArrayList(s);
Collections.sort(lists);
//遍历
Iterator it = lists.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
System.out.println("=================");
//将ArrayList集合转化成线程安全的
List mylist = new ArrayList();
Collections.synchronizedList(mylist);
}
}
标签:System,接口,println,add,详解,Collection,集合,new,out
From: https://www.cnblogs.com/xhengge/p/17738265.html