去除集合中的重复元素:(新集合是否包含旧集合元素的思想)
public static void main(String[] args) {
ArrayList c = new ArrayList();
c.add("1"); //如果存储的是对象,去重需要在对象中重写equals方法,因为contains和remove=底层都是equals写的
c.add("1");
c.add("1");
c.add("4");
c.add("4");
c.add("5");
ArrayList a = qu(c);
Iterator it = a.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
}
public static ArrayList qu(ArrayList l) {
ArrayList a = new ArrayList();
Iterator it = l.iterator();
while(it.hasNext()) {
Object o = (Object)it.next();
if(!a.contains(o)) {
a.add(o);
}
}
return a;
}
LinkedList类:
public void addFirst(E e)及addLast(E e)//首位置添加和尾位置添加
public E getFirst(int)及getLast()//获取
public E removeFirst()及public E removeLast()//删除
public E get(int index);//获取第index个元素
队列先进先出。
泛型:
ArrayList<String> c = new ArrayList<String>(); //1.7之后右边的<>中可以为空。<?>这是通配符,右边的不确定时,左边可以写为<?>
提高安全性(将运行期的错误转换到编译期)
省去强转的麻烦
泛型基本使用:
<>中放的必须是引用数据类型
泛型使用注意事项:
前后的泛型必须一致,或者后面的泛型可以省略不写(1.7的新特性菱形泛型)
泛型不要定义成object,和没定义一样,没有意义
类名后边加<>接可以将类转换为泛型类,方法名后边的括号中(Q q)就变成了泛型方法,泛型方法需要与泛型类的泛型一致(或者在public后加上特有泛型,方法就可以重新定义泛型)。如:
public class Tool<T> { //泛型类
privatr T ttt;
public T setTtt(T t) {
this.ttt = ttt;
}
public T getTtt() {
return ttt;
}
public<Q> void show(Q q) { //泛型方法 ,推荐与类的泛型一致,不一致需要在public后加 <新> 的泛型。如果是static静态方法,是随着类的加载而加载的,必需定义自己的泛型。
System.out.println(ttt);
}
}
接口泛型实现方法:
class Demo implements inter<String> {
public void show(String t ){
Syste.out.pritln(t);
}
}
增强的for循环(底层是迭代器(Iterator)): for(int i : arr) {}
for(int i : arr){ //遍历数组
System.out.println(i);
}
for(String string :list) { //遍历存储字符串的集合
System.out.println(string);
}
for(Student s : list) { //遍历存储对象的集合
System.out.println(s);
}
三种迭代的能否删除
* 普通for循环,可以删除,但是删除一个指针就会向下移,其余元素就会向上移,移动到删除位置的元素没有经过遍历,被漏掉了。删除之后需要i- -让指针回来一次。
* 迭代器,可以删除,但是必须使用迭代器自身的remove方法,否则会出现并发修改异常(同是remove,但告诉迭代器的数量不能由别人修改,只能由迭代器修改)
* 增强for循环不能删除
静态导入:(1.5新特性)
格式
* import static 包名….类名.方法名;
* 可以直接导入到方法的级别
方法必须是静态的,如果有多个同名的静态方法,容易不知道使用谁?这个时候要使用,必须加前缀。由此可见,意义不大,所以一般不用,但是要能看懂。
可变参数:定义方法的时候不知道该定义多少个参数(1.5新特性)其实是一个数组
格式
print(11,22,33,44,55); //测试类中的调用,可以传入数组,可以直接传入元素
public static void print(int x,int...arr) { //...代表可变参数,范围是0到无穷大 int x要一个参数,如果int x放在后边就拿不到参数了
for(int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
数组转集合:虽然不能增加和删除元素,但是可以使用集合中其他方法。
List<E> li = Arrays.asList()
Collection中toArray(T[] a)泛型版的集合转数组
注意:集合只能存储引用数据类型,所以基本数据类型的数组转换成集合是将整体作为一个元素存放,此时的泛型是int[]。如果要将基本数据类型转换成集合,需要在定义为基本数据包类型,如:Integer[] arr = {11,22,33};
集合转数组:泛型的集合转数组
String[] arr = list.toArray(new String[0]); //这里的index如果小于size数组大小就是集合大小,否则数组就是指定的index大小
集合嵌套之ArrayList嵌套ArrayList:
ArrayList<ArrayList<Student>> list = new ArrayList();
ArrayList<Student> first = new ArrayList(); //班级
first.add("yi",21);
ArrayList<Student> second = new ArrayList();
second.add("er",22);
list.add(first); //系
list.add(second);
for(ArrayList<Student> a : list) { //遍历
for(Student p : a) {
System.out.println(p);
}
}
集合的排序: Collections.sort(l);
List<String> l = new ArrayList<>();
l.add("b");
l.add("a");
l.add("e");
l.add("d");
l.add("c");
Collections.sort(l);
System.out.println(l);
|
|