• java.util中的Stack,Queue,Iterable;泛型


    每日心得

    今天学的还不错,学的东西基本上明白了,就是感冒挺难受的。

    1、Stcak类(栈,FILO先进后出)

    继承了Vector类,pop()方法:弹出(使用remove方法移除最后一个元素);

    2、Queue接口(队列,FIFO先进先出)

    LinkedList是它的实现类,boolean offer(Object o):将指定的元素插入此队列(如果立即可行且不会违反容量限制),当使用有容量限制的队列时,此方法通常要优于 add(E),后者可能无法插入元素,而只是抛出一个异常。

    3、Iterable接口(java.lang内)

    Collection继承了Iterable接口,要获取Iterator对象,就要实现Iterable接口,重写Iterator()

    Iterator方法

    迭代器,用来实现foreach循环,只是一个工具,单独的一个迭代器并没有任何意义,依赖于一个类来使用,通过什么生成的迭代器,就只能迭代什么,一次性用品,想要再次使用必须重新定义,代码如下:

      while(iter.hasNext()){
          obj=iter.next();
          System.out.println(obj);
      }
    

    使用循环时,不需要获取其位置,把所有元素遍历一遍,若遍历结束后再调用next(),将会报错;迭代时,如果要进行删除的操作,只能使用迭代器接口中的remove()方法,而不能使用集合的remove()方法;
    若一个自定义的类想要使用foreach循环,需要继承迭代器的接口,重写hasNext()与`next()方法,迭代遍历的使用,与foreach循环效果一样。

    4、泛型

    直接上代码:

      public class test4 <T>{
    private T t;
    public static <S> void main(String[] args) {
    	
    }
      }
    

    可以在类,接口上定义,也可使用在方法,属性上;Map接口就是很好的例子:

      public interface Map<K, V> {
      public void put(K key, V value);
      public V get(K key);
      } 
    

    T可以为任意类型,但不能是基本数据类型,T表示一个不确定类型,其目的是为了在使用时填写需要的数据类型进行替换,若是尖括号里不填,默认类型为Object。为了统一规范某种数据类型,定义的时候类型不确定,使用时会固定其替换的数据类型。例如:

      List<String>list=new ArrList;
      list.add(String);//括号里只能是String,因为类型已经进行了限制
      Map<String.String>map=new HashMap<>();//钻石语法,后方<>中的类型可省略。
    

    泛型边界

    边界上限

    可以直接在括号里继承某个类或接口,也可以实现某个接口,,意思是从x往下的类型都可以;

    边界下限

    这个把我们老师还坑了一下,并不能像上限一样直接写在括号里,老师也没明白这个原因是什么,官方文档里并没有明确解释,老师猜测可能是实际意义不大。在类、接口上使用时,必须继承某个类或接口,接口中有泛型,在使用时再次进行约束,例如:

      interface ITest2<W extends ITest<? super String>>{}
      interface ITest<S>{}
    

    泛型(类型)擦除

    用下面这串代码来解释一下:

      List<String>list=new ArrayList();
      list.add("abc");//括号里只能是String类型
    

    其泛型擦除的含义是编译器经过编译后,会把泛型的类型即<String>擦除掉。这个时候我们疑惑为什么擦除了后,后面的添加中编译器还是进行了类型限制呢?这是因为编译器在编译之前会进行自动检查,识别其类型的约束,不过这只限于直接调用,如果间接调用则不会识别这个类型限制(这个原理与地铁的安检类似,进去时检查,出来进行安检也就失去了意义,但是如果你不是从正门进的,而是以其他方式进入的,则不会遇到安检);编译后会变为List类型,即原始类型,所以Java中的泛型也称之为伪泛型。

    Collections类(学习上用得多,工作上很难用上)

    类中大部分方法为静态,.sort():按自然顺序进行排序;老师为了做一个例子,还提了一个类UUID,实际上是一种算法,里面的.randomUUID()方法能够生成一个不重复的字符串。若是要按照自定义类型中的某个属性进行排序,要制定一个比较规则,需要继承Compare接口,compareto()方法(输出-1,0,1分别表示小于,等于,大于),数据量小的时候可用。



  • 相关阅读:
    AC日记——接苹果 洛谷 P2690
    AC日记——友好城市 洛谷 P2782
    AC日记——栈 洛谷 P1044
    AC日记——L国的战斗之间谍 洛谷 P1916
    AC日记——[USACO1.1]坏掉的项链Broken Necklace 洛谷 P1203
    AC日记——[USACO1.5]数字三角形 Number Triangles 洛谷 P1216
    Codevs 1048 石子归并
    Codevs 1138 聪明的质监员 2011年NOIP全国联赛提高组
    HDU 1575 Tr A
    Codevs 5059 一起去打CS
  • 原文地址:https://www.cnblogs.com/zzdbk/p/14175127.html
Copyright © 2020-2023  润新知