List集合
*List集合,通常是有序集
特点是可以根据下标操作元素
List<String> list = new ArrayList<String>();
list.add("one");
list.add("two");
list.add("three");
list.add("four");
/*
* T get(int index)
* 获取给定下标所对应元素
*/
String str = list.get(2);
System.out.println(str);
/*
* List集合可以通过下标遍历的方法遍历每个元素
*/
for(int i = 0;i<list.size();i++){
str = list.get(i);
System.out.println(str);
}
/*
* T set(int index, T t)
* 将给定的元素设置到给定的位置上
* 返回值为原位置上的元素
* 所以该方法是替换元素的操作,注意不能下标越界
*/
System.out.println(list);
String old = list.set(1, "2");
System.out.println(list);
System.out.println("被替换的元素:"+old);
List集合的方法插入与删除
List<String> list = new ArrayList<String>();
list.add("one");
list.add("two");
list.add("three");
/*
* void add(int index,T t)
* 将给定的元素添加到指定的位置上
* 原位置以及后续的元素顺序向后移动
* 插入操作
*/
System.out.println(list);
list.add(1, "2");
System.out.println(list);
/*
* E remove(int index)
* 删除给定位置上的元素
* 返回值为被删除的元素
*/
String remove = list.remove(2);
System.out.println(list);
System.out.println("被删除的是"+remove);
List方法获取子集
List<Integer> list = new ArrayList<Integer>();
for(int i=0;i<10;i++){
list.add(i);
}
System.out.println(list);
/*
* List subList(int start,int end)
* 获取当前集合中的子集
*/
List<Integer> subList = list.subList(3, 8);
System.out.println(subList);
/*
* 将子集的元素扩大十倍
*/
for(int i = 0;i<subList.size();i++){
subList.set(i,subList.get(i)*10);
}
System.out.println(subList);
/*
* 修改子集元素会影响原集合
*/
System.out.println(list);
集合的排序
List<Integer> c = new ArrayList<Integer>();
Random random = new Random();
for(int i=0;i<10;i++){
c.add(random.nextInt(100));
}
System.out.println(c);
/*
* 通过Collections这个集合的工具类
* 我们可以对List集合进行自然排序
*/
Collections.sort(c);;
System.out.println(c);
Comparable接口
public static void main(String[] args) {
List<Cell> list = new ArrayList<Cell>();
list.add(new Cell(4,5));
list.add(new Cell(1,7));
list.add(new Cell(1,2));
list.add(new Cell(3,3));
System.out.println(list);
/*
* 使用Collection的sort方法进行排序的
* 集合,要求元素必须实现Comparable接口
* 只有实现了该接口才认为是可比较的元素
*/
Collections.sort(list);
System.out.println(list);//自然大小排列
}
Cell
public class Cell implements Comparable<Cell> {
int x;
private int y;
public Cell(int x,int y){
this.x = x;
this.y = y;
}
//重写equals
public boolean equals(Object obj){
if(this == obj){
return true;
}
if(obj == null){
return false;
}
if(obj instanceof Cell){
Cell c = (Cell) obj;
return this.x == c.x&&this.y == c.y;
}
return false;
}
public String toString(){
return "Cell [x=" + x + ",y=" + y + "]";
}
/*
* 比较大小的方法
* 返回值不关注具体的值,只关注取值范围
* 返回值<0;当前随想比给定对象小
* 返回值=0;两对象相等
* 返回值>0;当前对象比给定对象大
*/
public int compareTo(Cell o) {
/*
* 比较规则如下:
* y值大的大
*/
return this.y-o.y;
}
当集合已经实现了Comparable接口,并且实现了比较规则时,但是该比较规则不能满足我们对于排序需求时我们可以额外的定一个比较规则。
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class SortCollection3 {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("张三擦擦手");
list.add("张三爱疯舞使得");
list.add("张三");
list.add("张三叉叉");
System.out.println(list);
Collections.sort(list);
System.out.println(list);
}
}
/*
* 当集合已经实现了Comparable接口,并且实现了
* 比较规则时,但是该比较规则不能满足我们对于排序需求时
* 我们可以额外的定一个比较规则
*/
class MyComparator implements Comparator<String>{
/*
* 自定义比较字符串规则,字符串字符多大
*/
public int compare(String o1,String o2){
return o1.length()-o2.length();
}