一.Java的主要集合类:


二.ArrayList的一些常用方法:(实现Collection接口中的方法:)
package Collection;
import java.util.ArrayList;
import java.util.List;
public class CollectionMethod {
public static void main(String[] args) {
List list=new ArrayList();
//add:添加某个元素
list.add("jack");
list.add(10); //list.add(new Integer(10))
list.add(true);
System.out.println("list= "+list);
//remove:删除元素,返回值是删除的元素值
System.out.println(list.remove(0)); //删除第一个元素并打印此元素
list.remove(true); //删除指定元素
System.out.println("list= "+list);
//contains:查找元素是否存在
System.out.println(list.contains("jack")); //返回true并打印
//size:获取元素个数
System.out.println(list.size()); //返回2
//isEmpty:判断是否为空
System.out.println(list.isEmpty()); //返回为F
//clear:清空
//list.clear();
System.out.println("list= "+list);
//addAll:添加多个元素
ArrayList list2 = new ArrayList();
list2.add("红楼梦");
list2.add("三国演义");
list.addAll(list2);
System.out.println(list);
//containsAll:查找多个元素是否都存在
System.out.println(list.containsAll(list2));
//removeAll:删除多个元素
list.removeAll(list2);
System.out.println("list= "+list);
}
}
三.迭代器遍历:
Iterator对象称为迭代器,主要用于遍历Collection集合中的元素.
因为Collection接口继承了Iterator接口,所以所有实现了Collection接口的类(例如ArrayList类)都有一个iterator()方法,用于返回一个实现了iterator接口的对象,即返回一个迭代器.
也就是当创建一个ArrayList对象时,这个对象有一个iterator方法,当这个对象调用这个方法时可以获得一个iterator对象,它就是迭代器.
迭代器用来遍历集合对象中的元素:
package Collection;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class CollectionIterator {
@SuppressWarnings({"all"})
public static void main(String[] args) {
Collection col=new ArrayList();
col.add(new Book("三国演义","罗贯中"));
col.add(new Book("小李飞刀","古龙"));
col.add(new Book("红楼梦","曹雪芹"));
System.out.println("col= "+col);
//遍历col集合:
//所有实现了Collection接口的类(例如ArrayList类)都有一个iterator()方法,
//也就是创建出一个ArrayList对象后,这个对象有一个iterator方法,可以返回一个迭代器对象.
//1.先得到col集合的迭代器:
Iterator iterator = col.iterator(); //迭代器类似指针,每次向下移动
//2.使用while循环遍历:
while(iterator.hasNext()) //判断下面是否还有元素
{
//发现编译类型是Object,实际的运行类型是Book(就像iterator指针指着col容器中的Book对象)
Object next = iterator.next();
System.out.println(next);
}
//3.当退出while循环之后,迭代器已经到达底部,指向最后元素
iterator.next(); //会爆出异常:NoSuchElementException
//4.所以如果再次使用迭代器,则需要重置迭代器:
iterator=col.iterator();
System.out.println("第二次遍历col:");
while (iterator.hasNext()) {
Object next = iterator.next();
System.out.println(next);
}
}
}
class Book{
private String name;
private String author;
public Book(String name, String author) {
this.name = name;
this.author = author;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
@Override
public String toString() {
return "Book{" +
"name=" + name +
", author='" + author + '\'' +
'}';
}
}
(也可以使用增强型for循环更为简便(底层还是迭代器),在集合和数组中都可以使用.)
四.实现List接口中的方法:(不管是实现的哪个接口的方法,都是使用创建ArrayList对象去调用的)
1.List集合类中的元素是有序的,可以有重复的元素.
2.每个元素有对应索引,重复的元素也有对应自己的索引.
package List;
import java.util.ArrayList;
import java.util.List;
public class ListMethod {
@SuppressWarnings({"all"})
public static void main(String[] args) {
List list = new ArrayList();
list.add("张三丰");
list.add("贾宝玉");
//1.void add(int index,Object obj)可以指定插入在任意位置
list.add(1,"jack");
list.add("jack");
System.out.println("list= "+list); //list= [张三丰, jack, 贾宝玉, jack]
//2.Object get(int index)获取指定位置上的元素,元素类型是Object
System.out.println(list.get(2)); //贾宝玉
//3.int indexOf(Object obj)返回元素在集合中首次出现的位置:
System.out.println(list.indexOf("jack")); //1
//4.int lastIndexOf(Object obj)返回元素末次出现的位置:
System.out.println(list.lastIndexOf("jack")); //3
//5.Object remove(int index)删除元素,返回值是此元素
System.out.println(list.remove(1)); //jack
System.out.println("list= "+list); //list= [张三丰, 贾宝玉, jack]
//6.Object set(int index,Object ele):替换index位置元素为ele
list.set(1,"mary"); //注意索引位置要存在才能替换,否则报错
System.out.println("list= "+list); //list= [张三丰, mary, jack]
//7.List subList(int fromIndex,int toIndex):返回从fromInedx到toIndex的子集合
//返回的是前闭后开的子集合
List returnlist=list.subList(0,2);
System.out.println("returnlist= "+returnlist); //returnlist= [张三丰, mary]
}
}
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!注意放到集合中的元素默认都是Object类型的!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
List排序练习:将Book类型的对象放入List中,写一个方法以每个对象的价格进行从小到大排序,再调用此方法输出:(使用ArrayList,Vector,LinkedList创建List集合最后结果都是一样的。)
1.构造Book类:
package List;
public class Book {
private String name;
private String author;
private double price;
public Book(String name, String author, double price) {
this.name = name;
this.author = author;
this.price = price;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
@Override
public String toString() {
return "名称:"+getName()+"\t\t价格:"+getPrice()+"\t\t作者:"+getAuthor();
}
}
2.使用List集合装入Book对象:
package List;
import java.util.List;
import java.util.ArrayList;
public class LiseExercise02 {
public static void main(String[] args) {
List list=new ArrayList();
list.add(new Book("红楼梦","a",100));
list.add(new Book("三国志","b",10));
list.add(new Book("西游记","c",19));
list.add(new Book("水浒传","d",80));
for (Object o :list) {
System.out.println(o);
}
sort(list);
System.out.println("======排序后======");
for (Object o :list) {
System.out.println(o);
}
}
//冒泡排序
public static void sort(List list)
{
int listsize=list.size();
//4个元素确定3个,就不用再进行了
for(int i=0;i<listsize-1;i++)
{
//4个元素只需比较3次,每次i循环还会确定一个,所以-i
for(int j=0;j<listsize-1-i;j++)
{
//由于List默认对象是Object类型,所以需要向下转型
Book book1=(Book)list.get(j);
Book book2=(Book)list.get(j+1);
if(book1.getPrice()>book2.getPrice())
{
//使用list替换方法
list.set(j,book2);
list.set(j+1,book1);
}
}
}
}
}
//运行结果:
//名称:红楼梦 价格:100.0 作者:a
//名称:三国志 价格:10.0 作者:b
//名称:西游记 价格:19.0 作者:c
//名称:水浒传 价格:80.0 作者:d
//======排序后======
//名称:三国志 价格:10.0 作者:b
//名称:西游记 价格:19.0 作者:c
//名称:水浒传 价格:80.0 作者:d
//名称:红楼梦 价格:100.0 作者:a