Collection_ArrayList

来源:互联网 发布:淘宝发错货买家不寄回 编辑:程序博客网 时间:2024/06/15 23:37
Collection_ArrayList小结:
1.List又分为ArrayList(数组实现,查询更快)和LinkedList(链表实现,增删更快,尤其是首尾增删最快)
2.两个小案例:子集元素增加10倍,以及批量删除元素(取出子集,clear();)。
3.6个基本方法:增删改插查截(方法举例,不具有逻辑)
4.数组和ArrayList互转操作
5.Collections.sort();方法排序
(1)原始排序,如字符串,API写好的
(2)2. sort方法要求集合元素实现Comparable接口,侵入性大,规定实现类(元素)可以比较有一个抽象方法用来定义比较大小的规则 不好,耦合性高,不利于程序的扩展不建议使用, 因为排序应该是一种方法,不该定义在元素上
      (3)自己搞一个比较器,排序中可以传入比较器,如果只用一次,整一个匿名内部类的方式创建 
******************************************************************************************
知识点1.
List<String> list=new ArrayList<String>();
list.add("one");
list.add("two");
list.add("three");
list.add("four");//增
System.out.println(list);
list.remove(2);//删,根据下标,有返回值
list.set(2,"二");//改,根据下标,有返回值
list.add(2,"二");//插
list.get(2);//查
list.subList(2,5);//获取子集
知识点2.
**(1)
//Object[] array=c.toArray();不常用
//size写小了自动创建新的,大了后面都是null
String[] array=c.toArray(new String[c.size()]);//--->数组
**(2)
String [] array={"one","two","three"};
List<String> list=Arrays.asList(array);
System.out.println(list);

//集合中添加一个元素,代码会异常,会对原数组进行修改,所以不支持
//list.add("five");
//System.out.println(list);

//修改可以,但依旧会改变数组元素
//非要增删,自己搞一个
//List<String> list1=new ArrayList<String>();
//list1.addAll(list);
List<String> list1=new ArrayList<String>(list);
//如上两步变一步,也叫复制构造器,另建一个包含给定集合的元素
list1.add("five");
System.out.println(list1);

知识点3.

(1)已经写好的API中的字符串

Collections.sort(list);

(2)

Point实例:

public class Point implements Comparable<Point> {
private int x;
private int y;
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public Point(int x, int y) {
super();
this.x = x;
this.y = y;
}
@Override
public String toString() {
return "Point [x=" + x + ", y=" + y + "]";
}
@Override
/**
 * 用来定义比较规则
 * 返回值是int,表示大小关系。不关注取值多少,而是取值范围
 * >0,当前对象大,参数小.......以此类推
 */
public int compareTo(Point o) {
//比较到原点的距离 
int len=this.x*this.x+this.y*this.y;
int olen=o.x*o.x+o.y*o.y;
return len-olen;
}

}

Test实例:

public class Test {
public static void main(String[] args) {
List<Point> list=new ArrayList<Point>();
list.add(new Point(1,2));
list.add(new Point(3,4));
list.add(new Point(5,6));
list.add(new Point(7,8));
list.add(new Point(9,0));
System.out.println(list);
Collections.sort(list);
System.out.println(list);
}
}

(3)定义比较器传入和以匿名内部类的形式创建

package Collection_List;
import java.util.List;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
public class demo_sort3 {
public static void main(String[] args) {
List<String> list=new ArrayList<String>();
list.add("苍老师");
list.add("范老师");
list.add("小泽老师");
System.out.println(list);//原始

//MyComparator com=new MyComparator();//创建比较器
//Collections.sort(list,com);//传入比较器
//System.out.println(list);


Collections.sort(list,new Comparator<String>(){
@Override
public int compare(String o1, String o2) {
return o2.length()-o1.length();
}
});
System.out.println(list);
}
}
//定义额外的比较器
class MyComparator implements Comparator<String>{
@Override
public int compare(String o1, String o2) {
//大于0,o1大
return o1.length()-o2.length();
}
}