Api day01
笔记
-
List接口:
-
继承自Collection接口,List集合是可重复集合,并且有序,并且提供了一套可以通过下标操作元素的方法
-
常见的实现类:
-
java.util.ArrayList:内部使用数组实现,查询性能更好(直接下标查找)、增删性能不太好
-
java.util.LinkedList:内部使用链表实现,查询性能不太好,首尾增删元素性能更好
注意:在对集合操作的性能没有特别苛刻要求时,通过选择ArrayList。
-
-
-
List集合常见方法:
//创建一个String类型的结合
List<String> list = new ArrayList<>();
list.add("one");
list.add("two");
list.add("three");
list.add("four");
list.add("five");
System.out.println(list);
- get():根据下标获取元素
/*
E get(int index)
获取指定下标处的元素
*/
//获取List集合第三个元素
String e = list.get(2);
System.out.println(e);
- set():将指定元素设置到指定位置 ,并返回被替换的元素(用时接收)
/*
E set(int index,E e)
将给定元素设置到指定位置,返回值为被替换的元素
*/
//[one,two,six,four,five]
String old = list.set(2,"six");
System.out.println(list);
System.out.println(old);
- 重载add():将指定元素添加到指定位置,理解为插入操作
/*
void add(int index,E e)
插入操作,将给定元素插入到指定位置
*/
//[one,two,three,six,four,five]
list.add(3,"six");
System.out.println(list);
- 重载remove():删除并返回指定位置元素
/*
E remove(int index)
删除并返回指定位置的元素
*/
//[one,two,six,four,five]
String old = list.remove(2);//删除第三个元素
System.out.println(list);
System.out.println("被删除的元素是:"+old);
- subList():获取当前集合中指定范围内的子集(含头不含尾)
/*
List subList(int start,int end)
获取当前List集合中指定范围内的子集.下标含头不含尾.
*/
//获取[3-7]
List<Integer> subList = list.subList(3,8);
System.out.println(subList);
-
集合的排序:
-
Collections是集合的工具类,里面定义了很多静态方法用于操作集合
-
Collections.sort(List list)方法:可以对list集合进行自然排序(从小到大),Collections.sort(List list)方法要求List集合中的元素必须是可比较的,若不可比较则直接发生编译错误,不允许排序。判定是否可比较的标准为元素是否实现了java.util.Comparable接口。实际开发中,我们并不会让我们自己定义的类去实现Comparable接口的,因为这对我们的程序有侵入性。
-
Comparator<Point> c = new Comparator<Point>() {
public int compare(Point o1, Point o2) {
//比较规则:点到原点的距离长的大
int len1 = o1.getX()*o1.getX()+o1.getY()*o1.getY();
int len2 = o2.getX()*o2.getX()+o2.getY()*o2.getY();
return len1-len2;
}
};
Collections.sort(list,c);
侵入性:当我们调用某个API功能时,其要求我们为其修改其它额外的代码,这个现象叫做侵入性。侵入性越强则越不利于程序的后期维护,应尽量避免。
- 建议使用重载的Collections.sort(List list, Comparator c)方法,可以通过Comparator来自定义规则
Collections.sort(list,new Comparator<Point>() {
public int compare(Point o1, Point o2) {
int len1 = o1.getX()*o1.getX()+o1.getY()*o1.getY();
int len2 = o2.getX()*o2.getX()+o2.getY()*o2.getY();
return len1-len2;
}
});
-
Set接口:
-
继承自Collection接口,元素是不可重复的,并且是无序的
-
常见的实现类:
- HashSet类:
-
package apiday04;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
* Set集: 不可重复集合、并且无序
*/
public class SetDemo {
public static void main(String[] args) {
//小面试题: 如何去重?
List<String> list = new ArrayList<>();
list.add("one");
list.add("two");
list.add("three");
list.add("four");
list.add("five");
list.add("two");
System.out.println(list);
Set<String> set = new HashSet<>();
set.addAll(list);
System.out.println(set);
/*
Set<String> set = new HashSet<>();
set.add("one");
set.add("two");
set.add("three");
set.add("four");
set.add("five");
set.add("two");
set.add("five");
System.out.println(set);
*/
}
}