java基础13

map常用的子类

Hashtable:内部结构是哈希表,是同步的。不允许null。不允许null作为键,不允许null作为值。Properties:用来存储键值对型的配置文件信息,可以和IO技术相结合。

HashMap:内部结构是哈希表,不是同步的。允许null作为键,允许null作为值。

TreeMap:内部结构是二叉树,不是同步的。可以对map集合中的键进行排序。

泛型

jdk1.5出现的安全机制。

好处:1.将运行时期的问题转换成了编译时期的问题。2.避免了强制转换的麻烦。

<>:什么时候用?当操作的引用数据类型不确定的时候,又要用<>。将要操作的引用数据类型传入即可。其实<>就是一个用于接收具体引用数据类型的参数范围。

在程序中,只要用到了带有<> 的类或接口,就要明确传入的具体引用数据类型。

泛型技术是给编译器使用的技术,用于编译时期。确保了类型的安全。

运行时,会将泛型去掉,生成的class文件中是不带泛型的,这个称为泛型的擦除。为什么擦除呢?因为为了兼容类加载器。

泛型的补偿:在运行时,通过获取元素的类型进行转换动作,不用使用者再强制转换了。

可以将泛型定义在方法上,也可以将泛型定义在类或接口上。

当方法静态时,不能访问类上的泛型,如果静态方法使用泛型,只能将泛型定义在方法上。

泛型的通配符:?

public static void printCollection(Collection<? extends Person> al){...}

public static void printCollection(Collection<?> al){...}

可以对类型进行限定:

? extend E:接收E类型和E类型的子类型

? super E:接收E类型和E类型的父类型

一般在存储元素的时候都是使用上限,因为这样取出都是按照上线类型来运算的,不会出现类型安全隐患。通常对集合中的元素进行取出操作时,可以使用下限。(下限使用频率低)

集合的一些技巧:需要唯一吗?

需要:Set      需要指定顺序吗?   需要:TreeSet      不需要:HashSet    但是想要一个和存储一致的顺序:LinkedHashSet

不需要:List    需要频繁增删吗?   需要:LinkedList    不需要:ArrayList

如何记录每一个容器的结构和所属体系呢?看名字,后缀名就是该集合所属的体系,前缀名就是该集合的数据结构。

LinkedHashMap:存储有序(能保证存进去与取出来的顺序是相等的)。

map在有映射关系时,可以优先考虑。在查表法中的应用较为常见。

工具类

Collections:(此类由与集合框架相关的静态方法组成,是集合框架的工具类)

Collections.sort(List list):对List集合进行指定顺序的排序。

Collections.swap(List list, int befor, int after):交换List集合中两个元素的位置。

Collections.max(Collections col,Comparator comparator):获取元素的最大值和最小值。

Collections.reverOrder(Comparator comparator):将指定的比较器强行逆转。

Collections.reverse(List list):将指定的集合强行逆转。

Collections.replaceAll(List list, String old, String new):将集合中的指定元素用新的元素替换。

Collections.fill(List list, Object obj):将集合中所有的元素都替换成obj。

Collections.shuffle(List list):随机将集合重排。

Collections. synchronizedCollection(Collection<T> c):返回一个线程安全的集合。

Arrays(集合框架的工具类)

Arrays.equals(int[] a, int[] b):如果两个数组中的元素相同,返回true,

Arrays.equals(boolean[] a, boolean[] b):如果两个数组中的元素相同,返回true.

Arrays.asList(T[] t):将数组转成集合,注意:数组中的长度是固定的,不能使用增删方法(可以使用集合中的方法操作数组中的数据)。如果数组中的元素是对象,那么转换成集合时,直接将数组中的元素作为集合中的元素进行集合存储。如果数组中的元素是基本数据类型,那么会将该数组作为集合中的元素进行存储。

集合转换成数组:使用的就是Collection接口中的toArray方法(可以对集合中的元素操作的方法进行限定,不允许对其进行增删)。

list.toArray方法需要传入一个指定类型的数组。如果指定类型数组的长度小于集合size,那么该方法会创建一个同类型和size大小相同的数组。如果指定类型长度大于集合的size,那么该方法会使用指定类型的数组长度存储集合中的元素,其他位置默认为null.

foreach语句格式:for(类型 变量:Collection集合|数组){...}   //一般只用于对元素迭代。

int ... arr:可变参数(参数个数为0,1,2,3....),其实就是一个数组,不许定义在所有参数的末尾。

猜你喜欢

转载自blog.csdn.net/weixin_42581821/article/details/86686401