A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 811487754 中级黑马   /  2016-8-2 15:22  /  433 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

去除集合中的重复元素:(新集合是否包含旧集合元素的思想)
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);

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马