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分别表示小于,等于,大于),数据量小的时候可用。



posted @ 2020-12-25 14:12  Ewg  阅读(81)  评论(0编辑  收藏  举报