package com.bjpowernode.demo01;
import java.util.ArrayList;
import java.util.List;
/**
* List
* 为每个元素指定了一个索引值, 增加了针对索引值的操作
* @author Administrator
*
*/
public class Test05 {
public static void main(String[] args) {
// 1) 创建List集合
List<String> list = new ArrayList<>();
//2) 添加元素
list.add("jj");
list.add("dd");
list.add("mm");
System.out.println( list ); //[jj, dd, mm]
//3)在指定的位置添加元素, 注意,索引值取值范围[0,list.size() ]
list.add(0, "gg");
System.out.println( list ); //[gg, jj, dd, mm]
list.add(list.size(), "DD");
System.out.println( list ); //[gg, jj, dd, mm, DD]
//4)返回指定位置的元素, 修改指定位置的元素
System.out.println( list.get(0));
System.out.println( list.get(list.size()-1)); //最后的元素
list.set(0, "GG");
System.out.println( list ); //[GG, jj, dd, mm, DD]
list.remove(0); //删除0索引的元素
System.out.println( list ); //[jj, dd, mm, DD]
//5)返回元素在集合中的索引值, 如果集合中不存在该元素,返回负数
System.out.println( list.indexOf("dd")); //第一次出现的索引值
System.out.println( list.lastIndexOf("dd")); //最后一次出现的索引值
System.out.println( list.indexOf("xx"));
System.out.println( list.lastIndexOf("oo"));
}
}
package com.bjpowernode.demo01;
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
/**
* List特有的操作
* 取子列表
* ListIterator迭代
* @author Administrator
*
*/
public class Test06 {
public static void main(String[] args) {
// 1) 创建List集合
List<String> list = new ArrayList<>();
//2) 添加元素
list.add("jj");
list.add("dd");
list.add("mm");
list.add("mm");
list.add("bb");
System.out.println( list ); //[jj, dd, mm, mm, bb]
//3) subList()方法返回的是List列表的一个视图, 并没有生成新的列表
List<String> subList = list.subList(0, 3);
System.out.println( subList ); //[jj, dd, mm]
//对subList进行操作,实际上是对List列表操作
subList.add(1, "XX");
System.out.println( subList ); //[jj, XX, dd, mm]
System.out.println( list ); //[jj, XX, dd, mm, mm, bb]
//4) ListIterator迭代器,不仅可以向后迭代,还可以向前迭代,不仅可以删除,还可以添加/修改
ListIterator<String> listIterator = list.listIterator();
while (listIterator.hasNext()) {
String string = listIterator.next();
System.out.print( string + "\t" );
}
System.out.println();
//jj XX dd mm mm bb
//现在listIterator迭代器的游标指向 最后一个元素的后面
//可以向前迭代
while( listIterator.hasPrevious() ){
String previous = listIterator.previous();
System.out.print( previous + "\t");
}
System.out.println();
//迭代过程中,进行修改,添加,删除
while (listIterator.hasNext()) {
String string = (String) listIterator.next();
if ("mm".equals(string)) {
listIterator.remove(); //迭代删除
}else if ("dd".equals(string)) {
listIterator.set("DD"); //修改当前元素
}else if ("jj".equals(string)) {
listIterator.add("XO"); //在游标的位置添加
}
}
System.out.println( list ); //[jj,XO, XX, DD, bb]
}
}
package com.bjpowernode.demo01;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
/**
* 排序
* @author Administrator
*
*/
public class Test07 {
public static void main(String[] args) {
// 1) 创建List集合
List<String> list = new ArrayList<>();
//2) 添加元素
list.add("jj");
list.add("dd");
list.add("mm");
list.add("mm");
list.add("bb");
//3)打印的顺序就是添加的顺序
System.out.println( list ); //[jj, dd, mm, mm, bb]
//4)对集合中元素进行由小到大/由大到小排序
//sort()方法参数是Comparator接口,在调用方法时,可以传递接口的匿名内部类对象
//Comparator后面有个泛型 , 这个泛型指定比较对象的数据类型
list.sort( new Comparator<String>() {
//在匿名内部类体中重写接口的抽象方法
@Override
public int compare(String o1, String o2) {
// 指定排序规则,
// return o1.compareTo(o2); // 如按字符串升序
return o2.compareTo(o1); // 如按字符串降序
}
});
System.out.println(list );
}
}
package com.bjpowernode.demo01;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
/**
* List集合中存储自定义类型的对象
* 可以根据对象的某个字段排序
* 注意:
* List集合进行contains(Object)/ remove(Object)等方法时,需要调用对象的equals()方法
* 要求自定义类需要重写equals()
* @author Administrator
*
*/
public class Test08 {
public static void main(String[] args) {
// 创建List集合,存储Student对象
List<Student> list = new ArrayList<>();
//向集合中添加Student对象
list.add( new Student("lisi", 18, 90));
list.add( new Student("zhang", 28, 70));
list.add( new Student("wang", 8, 80));
list.add( new Student("feifei", 28, 99));
//直接打印,按添加的顺序输出
System.out.println( list );
//把集合中Student对象根据年龄升序排序'
list.sort(new Comparator<Student>() {
//在匿名内部类中重写接口的抽象方法
@Override
public int compare(Student o1, Student o2) {
//定义比较规则
return o1.age - o2.age ; //年龄升序
}
});
System.out.println(list);
//把集合中Student对象根据成绩降序排序
list.sort(new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
return o2.score - o1.score; //成绩降序
}
});
System.out.println( list );
//判断是否包含某个对象
Student dubin = new Student("dudu", 35, 100);
list.add(dubin);
System.out.println( list );
System.out.println( list.contains(dubin)); //true
Student wangfeifei = new Student("feifei", 28, 99);
//List列表中contains(Object)/ remove(Object) 等方法, 需要列表中是否有这个对象
//需要调用对象的equals()方法
System.out.println( list.contains(wangfeifei)); //
list.remove(wangfeifei);
System.out.println( list );
}
}
class Student{
String name;
int age;
int score;
public Student(String name, int age, int score) {
super();
this.name = name;
this.age = age;
this.score = score;
}
@Override
public String toString() {
return "[name=" + name + ", age=" + age + ", score=" + score + "]";
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + age;
result = prime * result + ((name == null) ? 0 : name.hashCode());
result = prime * result + score;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Student other = (Student) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
if (score != other.score)
return false;
return true;
}
}
package com.bjpowernode.demo01;
import java.util.ArrayList;
import java.util.Vector;
/**
* ArrayList/Vector
* 1) 底层都是数组
* 2) ArrayList/Vector默认初始化大小: 10
* 3) ArrayList默认扩容: 1.5 倍, Vetor默认扩容: 2倍
* 4) Vector提供的操作,都使用synchronized修饰, 是线程安全的, ArrayList不是线程安全的
* @author Administrator
*
*/
public class Test09 {
public static void main(String[] args) {
//
ArrayList<String> arrayList = new ArrayList<>();
arrayList.add("abc");
arrayList.contains("abc");
Vector<String> vector = new Vector<>();
vector.add("hehe");
}
}