collection :类集合框架的接口
(1)List:(有序的)
LinkedList,它是List接口的实现类,其底层是用双向循环链表来实现的。
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
public class ListTest2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
LinkedList list=new LinkedList();
String string1="asd";
String string2="asd";
list.add(string1);
for (Iterator iterator =list.iterator(); iterator.hasNext(); ) {
String string3=(String)iterator.next();
if (string1.equals(string2)) {
list.remove(string1);
list.add(string2);
//System.out.println(list);
}else {
System.out.println(list);
}
System.out.println(list);
return;
}
list.add("zhangsan3");
list.add("zhangsan2");
list.add("zhangsan4");
list.add("zhangsan5");
list.add(0,"zhangsan");
List list2=new LinkedList();
list2.add("hello");
list2.addAll(0,list);
System.out.println(list);
System.out.println(list2);
// String[] list5=(String[]) list.toArray(new String[6]);
// System.out.println(list5);
boolean flag=list.equals(list2);
// boolean flag= list2.contains("hello");
System.out.println(flag);
for (int i = 0; i < list2.size(); i++) {
String res=(String)list2.get(i);
System.out.println(res);
}
System.out.println("----------------------------");
for (Object str:list2) {
if (str instanceof String) {
String str1=(String) str;
System.out.println(str);
}
}
System.out.println("----------------------------");
//迭代器
for (Iterator iterator=list2.iterator();iterator.hasNext();) {
String string=(String)iterator.next();
System.out.println(string);
}
System.out.println("----------------------------");
Iterator it=list.iterator();
while (it.hasNext()) {
String string=(String)it.next();
System.out.println(string);
}
}
}
注意:ArrayList(机制是数组)的查询效率比较高,增删动作的效率比较差,适用于查询比较频繁,增删动作较少的元素管理的集合。(常用)
LinkedList(链表)的查询效率低,但是增删效率很高。适用于增删动作的比较频繁,查询次数较少的元素管理集合。
ArrayList,LinkedList都是线程不安全的。ArrayList()初始长度为10;当数组已经满的时候,重新新建一个数组长度为1.5(arr)+1
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class ListTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayList list=new ArrayList();
list.add("zhangsan3");
list.add("zhangsan2");
list.add("zhangsan4");
list.add("zhangsan5");
list.add(0,"zhangsan");
List list2=new ArrayList<>();
list2.add("hello");
list2.addAll(0,list);
System.out.println(list);
System.out.println(list2);
// String[] list5=(String[]) list.toArray(new String[6]);
// System.out.println(list5);
boolean flag=list.equals(list2);
// boolean flag= list2.contains("hello");
System.out.println(flag);
for (int i = 0; i < list2.size(); i++) {
String res=(String)list2.get(i);
System.out.println(res);
}
System.out.println("----------------------------");
for (Object str:list2) {
if (str instanceof String) {
String str1=(String) str;
System.out.println(str);
}
}
System.out.println("----------------------------");
//迭代器
for (Iterator iterator=list2.iterator();iterator.hasNext();) {
String string=(String)iterator.next();
System.out.println(string);
}
System.out.println("----------------------------");
Iterator it=list.iterator();
while (it.hasNext()) {
String string=(String)it.next();
System.out.println(string);
}
}
}
(2)Set
和list一样,可以看成可变长度的数组的接口(但不能包含重复元素)
调用对象时:1、HashSet() 去重复的对象,,并且是无序的
Set set=new HashSet<>();
Gog gog1 =new Gog("g1");
Gog gog2 =new Gog("g2");
Gog gog3 =new Gog("g3");
Gog gog4 =new Gog("g4");
set.add(gog1);
set.add(gog2);
set.add(gog3);
set.add(gog4);
for (Iterator iterator = set.iterator();iterator.hasNext(); ) {
Gog gog=(Gog) iterator.next();
System.out.println(gog);
}
要重写toString方法
在Gog类上重写Tostring方法和equals方法
public String toString() {
return "Gog [name=" + name + ", toString()=" + super.toString() + "]";
}
public boolean equals(Object gog) {
return ((Animal) gog).getName().equals(this.getName());
}
2、TreeSet 去重复且按一定顺序排列
Set set=new TreeSet();
Gog gog1 =new Gog("g1",12);
Gog gog2 =new Gog("g2",23);
//Gog gog3 =new Gog("g4",12);
Gog gog4 =new Gog("g3",23);
set.add(gog1);
set.add(gog2);
//set.add(gog3);
set.add(gog4);
// System.out.println(set);
for (Iterator iterator = set.iterator();iterator.hasNext(); ) {
Gog gog=(Gog) iterator.next();
System.out.println(gog);
}
在Gog类重写equals方法和比较方法(compareTo)
public boolean equals(Object gog) {
return ((Animal) gog).getName().equals(this.getName());
}
public int hashCode(){
return super.getName().hashCode();
}
public int compareTo(Gog gog) {
//int result=super.getAge()-gog.getAge();
return this.getName().compareTo(gog.getName());
}
注:需要重写的方法有:toSring(),equals(),compareTo();
在开发中,用到Set时用到(比如购物车功能)
1、 equals •方法和hashCode保持一致;在同一次运行,当equals方法返回true的时候,hashcode返回同一个整数、
2、 equals 方法和compareTo保持一致;在同一次运行,当equals方法返回true的时候,compareTo返回0.