List集合接口
List继承自Collection——Iterable,Iterable接口循环迭代方式访问集合中的数据元素,定义了唯一一个返回指向集合的Iterator 的迭代器,它通过foreach方式处理集合中的元素,任何实现类都可以获取指向集合的迭代来实现对集合的遍历。 List继承父类并提供更多方法,如定义索引来处理集合元素方法。
ArrayList集合类
ArrayList集合类是List接口的大小可变数组的实现,实现了所有可选列表的操作,并包括null在内的所有元素,除了实现List接口的内容,还提供了处理内部储存数组大小的方法,ArrayList访问查找元素快,删除、插入随机操作比较慢,企业开发常用。 常用方法展示:
package day16Test;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class day16Main {
public static void main(String[] args) {
List stus = new ArrayList();
for(int i =0;i < 3;i++){
stus.add(new Student(i,i,(int)(Math.random()*10 + 10)));
}
for(int i = 0;i < stus.size();i++){
Object obj = stus.get(i);
Student s = (Student)obj;
System.out.println(s.show());
}
System.out.println("===================================");
for(Object obj:stus){
Student s = (Student)obj;
System.out.println(s.show());
}
System.out.println("===============================");
Iterator iterator = stus.iterator();
while(iterator.hasNext()){
Object obj = iterator.next();
Student s = (Student)obj;
System.out.println(s.show());
}
stus.clear();
System.out.println(stus.size());
System.out.println(stus.isEmpty());
}
}
class Student{
int name;
int id;
int age;
public Student() {
}
public Student(int name, int id, int age) {
this.name = name;
this.id = id;
this.age = age;
}
public String show() {
return "Student{" +
"name=" + name +
", id=" + id +
", age=" + age +
'}';
}
}
Vector集合
Vector也叫项量集合,与ArrayList类似是可变数组,Vector是线程同步的,在多线程中通常使用Vector处理被多个线程并发访问的数据。 Vector增加了pubic Enumeration elements方法,此方法返回Enumeration枚举接口,可使用此接口对集合的变量操作
package day16Test;
import java.util.Enumeration;
import java.util.Vector;
public class day16Main2 {
public static void main(String[] args) {
Vector teacher = new Vector();
for(int i =0;i < 3;i++){
teacher.add(new Teacher(i,i,(int)(Math.random()*10 + 10)));
}
System.out.println(teacher.isEmpty());
Enumeration enu = teacher.elements();
while(enu.hasMoreElements()){
Object obj = enu.nextElement();
Teacher t = (Teacher)obj;
System.out.println(t.show());
}
Teacher t1 = new Teacher(18,2344,56);
teacher.add(t1);
if (teacher.contains(t1)) {
teacher.remove(t1);
}
System.out.println("=========================分割线===========================");
for(Object obj:teacher){
Teacher tTemp = (Teacher)obj;
System.out.println(tTemp.show());
}
}
}
class Teacher{
int name;
int id;
int age;
public Teacher() {
}
public Teacher(int name, int id, int age) {
this.name = name;
this.id = id;
this.age = age;
}
public String show() {
return "Teacher {" +
"name=" + name +
", id=" + id +
", age=" + age +
'}';
}
}
结果 
set集合接口、Hashset
set接口也是继承Collection-Iterable,有Iterator迭代器 Set接口只能储存不相等的数据,其中的元素不带有任何索引
常用方法 boolean add(Object obj) void clear() boolean contain(Object obj) Iterator <E> iterator() boolean remove(Object obj) int size() boolean isEmply() Objcect[] toArray()//转成Object数组储存
HashSet实现 此类实现Set接口,由哈希表(实际是HashMap)支持,它不保证迭代顺序,也不保证迭代顺序保持不变,允许用null元素。 HashSet实现不是同步的,多个线程访问一个HashSet,其中一个线程修改了set,那么它必须保持外部同步
package day16Test;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class day16Main3 {
public static void main(String[] args) {
Set mySet = new HashSet();
Worker worker1 = new Worker(1, 233, 12);
Worker worker2 = new Worker(2, 198, 78);
Worker worker3 = new Worker(3, 783, 90);
mySet.add(worker1);
mySet.add(worker2);
mySet.add(worker3);
Iterator iterator = mySet.iterator();
while(iterator.hasNext()){
Object obj = iterator.next();
Worker w = (Worker)obj;
System.out.println(w.show());
}
System.out.println("将HashSet的数据用obj数组装起来");
Object[] objArray = mySet.toArray();
for(Object obj:objArray){
Worker w = (Worker)obj;
System.out.println(w.show());
}
}
}
class Worker {
int name;
int id;
int age;
public Worker() {
}
public Worker(int name, int id, int age) {
this.name = name;
this.id = id;
this.age = age;
}
public String show() {
return "Worker {" +
"name=" + name +
", id=" + id +
", age=" + age +
'}';
}
}
结果:  treeSet实现 基于TreeMap的NavigableSet实现并实现了SortedSet排序接口,使用元素的自然顺序对元素进行排序,或者根据创建set时提供的Comparator进行排序。此实现不是同步的,当多个线程对其进行操作时,有单个线程修改了这个set,需要外部同步。要排序,效率比HashSet低。
package day16Test;
import java.util.Iterator;
import java.util.TreeSet;
public class day16Main4 {
public static void main(String[] args) {
TreeSet tree = new TreeSet();
tree.add(new Integer(100));
tree.add(new Integer(94));
tree.add(new Integer(45));
tree.add(new Integer(998));
Iterator iterator = tree.iterator();
while (iterator.hasNext()){
Integer integerTemp = (Integer)(iterator.next());
System.out.println(integerTemp);
}
System.out.println("创建倒序的迭代器");
Iterator itReverse = tree.descendingIterator();
while (itReverse.hasNext()){
Integer integerTemp = (Integer)(itReverse.next());
System.out.println(integerTemp);
}
}
}
结果: 
TreeSet自定义排序方法
package day16Test;
import java.util.Comparator;
import java.util.TreeSet;
public class day16Main4 {
public static void main(String[] args) {
TreeSet tree = new TreeSet(new PlaneSort());
tree.add(new Plane(12, 45));
tree.add(new Plane(20, 56));
tree.add(new Plane(2, 99));
tree.add(new Plane(1, 57));
tree.add(new Plane(89, 8998));
for (Object obj : tree) {
System.out.println(((Plane) obj).toString());
}
System.out.println("首个为:" + tree.first().toString());
System.out.println("最后一个为:" + tree.last().toString());
}
}
class Plane{
int id;
int age;
public Plane(int id, int age) {
this.id = id;
this.age = age;
}
@Override
public String toString() {
return "Plane{" +
"id=" + id +
", age=" + age +
'}';
}
}
class PlaneSort implements Comparator{
@Override
public int compare(Object o1, Object o2) {
Plane p1 = (Plane)o1;
Plane p2 = (Plane)o2;
System.out.println("调用此方法");
if(p1.age > p2.age){
return -1;
}else if(p1.age < p2.age){
return 1;
}
return 0;
}
}
结果: 
|