Collection、List、Set、Map都是接口,不能实例化问题

2021-10-08 15:02:35 浏览数 (1)

基本数据类类型:存的是数值本身,java中有四类八种基本数据类型,

  • 第一类:整型 byte short int long
  • 第二类:浮点型 float double
  • 第三类:逻辑型 boolean
  • 第四类:字符型 char

引用类型变量:存放的是数据的引用地址,并不是数据的本身,引用类型变量是以间接方式去获取数据。引用类型变量都指向对象,如:数组、类、字符串等。

  Collection接口的常用方法:

  • boolean add(Object o)
  • void clear()
  • boolean isEmpty()
  • boolean contains(Object o)
  • Iterartor iterator()
  • boolean remove(Object o)
  • int size()
  • int hashCode();
  • boolean equals(Object o);
  • Object[] toArray() : 返回一个数组,该数组中包括集合中的所有元素

  List,Set是继承自Collection接口,Map不是。所以记不清队列和栈的添加和删除函数时,一律用add和remove。

总结:
  1. 如果涉及到堆栈,队列等操作,应该考虑用List,对于需要快速插入,删除元素,应该使用LinkedList,如果需要快速随机访问元素,应该使用ArrayList或者直接数组。
  2. 如果程序在单线程环境中,或者访问仅仅在一个线程中进行,考虑非同步的类,其效率较高,如果多个线程可能同时操作一个类,应该使用同步的类。
  3. 在除需要排序时使用TreeSet,TreeMap外,都应使用HashSet,HashMap,因为他们的效率更高。
  4. 要特别注意对哈希表的操作,作为key的对象要正确复写equals和hashCode方法。
  5. 尽量返回接口而非实际的类型,如返回List而非ArrayList,这样如果以后需要将ArrayList换成LinkedList时,客户端代码不用改变。这就是面向接口编程。
注意:

1、Collection没有get()方法来取得某个元素,只能通过iterator()遍历元素。 2、Set和Collection拥有一模一样的接口。 3、List,可以通过get()方法来一次取出一个元素,使用数字来选择一堆对象中的一个,get(0)...。(add/get)。 4、一般使用LinkedList构造栈stack、队列queue。 5、Map用 put(k,v) / get(k),还可以使用containsKey()/containsValue()来检查其中是否含有某个key/value。HashMap会利用对象的hashCode来快速找到key。 6、Map中元素,可以将key序列、value序列单独抽取出来。使用keySet()抽取key序列,将map中的所有keys生成一个Set。使用values()抽取value序列,将map中的所有values生成一个Collection。   为什么一个生成Set,一个生成Collection?那是因为,key总是独一无二的,value允许重复。

0 人点赞