Java Specification la programación del desarrollo (edición Baba Ali): proceso de recolección 5

Aquí Insertar imagen Descripción

  1. [Obligatorio] tratamiento en hashCode y equals, las siguientes reglas:

     1) Mientras la reescritura iguales, es necesario volver a escribir código hash.

     2) no se almacena porque el conjunto de objetos duplicados, se determina por su hashCode y equals, por lo que el objeto se almacena Set debe anular estos dos métodos.

     3) Si la costumbre objetos como llaves Mapa, debe reescribir el hashCode y equals.

说明:String 重写了 hashCode 和 equals 方法,所以我们可以非常愉快地使用 String 对象作为 key 来使用。

  1. [Obligatorio] resultados sublista arrayList de ArrayList no puede convertirse en un fuerte, de lo contrario será lanzar una ClassCastException que java.util.RandomAccessSubList no se puede convertir a java.util.ArrayList.

说明:subList 返回的是 ArrayList 的内部类 SubList,并不是 ArrayList 而是 ArrayList 的一个视图,对于 SubList 子列表的所有操作最终会反映到原列表上。

  1. [Obligatorio] en escena subLista, prestar atención a la altura de la colección original de elementos para agregar o quitar, dará lugar a atravesar el sub-listas, añadir, borrar productos excepción ConcurrentModificationException.

  2. [Fuerza] utilizando el conjunto método del conjunto de conmutadores, se debe establecer toArray (T [] array), se pasa en exactamente el mismo tipo de tamaño de la matriz es list.size ().

说明:使用 toArray 带参方法,入参分配的数组空间不够大时,toArray 方法内部将重新分配内存空间,并返回新数组地址;如果数组元素个数大于实际所需,下标为[ list.size() ] 的数组元素将被置为 null,其它数组元素保持原值,因此最好将方法入参数组大小定义与集合元素个数一致。

Ejemplos positivos:

List<String> list = new ArrayList<String>(2); 
list.add("guan"); 
list.add("bao"); 
String[] array = new String[list.size()]; 
array = list.toArray(array);

反例:直接使用 toArray 无参方法存在问题,此方法返回值只能是 Object[]类,若强转其它 类型数组将出现 ClassCastException 错误。

  1. [Fuerza] utilizando herramientas Arrays.asList () array en un conjunto de tiempo, que no puede ser utilizado para modificar un conjunto de métodos relacionados, que añadir / quitar método / clear lanza una UnsupportedOperationException.

说明:asList 的返回对象是一个 Arrays 内部类,并没有实现集合的修改方法。Arrays.asList 体现的是适配器模式,只是转换接口,后台的数据仍是数组。

String[] str = new String[] { "you", "wu" }; 
List list = Arrays.asList(str); 
// 第一种情况:list.add("yangguanbao"); 运行时异常。 
// 第二种情况:str[0] = "gujin"; 那么 list.get(0)也会随之修改。 
  1. [Obligatorio] comodín genérica <? Extiende T> para recibir los datos devueltos, la redacción de este colecciones genéricas no puede utilizar el método add, y <? Super T> get método no puede ser utilizado como una asignación de llamada interfaz cuando propenso a errores.

说明:扩展说一下 PECS(Producer Extends Consumer Super)原则:第一、频繁往外读取内容的,适合用<? extends T>。第二、经常往里插入的,适合用<? super T>。

  1. [Obligatorio] No haga que el elemento de eliminar / añadir operaciones en el bucle foreach. eliminar los elementos, utilice Iterator manera, si las operaciones concurrentes, la necesidad de Iterator objeto de bloqueo.
    Ejemplos positivos:
List<String> list = new ArrayList<>(); 
list.add("1"); list.add("2"); 
Iterator<String> iterator = list.iterator(); 
while (iterator.hasNext()) { 
    String item = iterator.next(); 
    if (删除元素的条件) { 
        iterator.remove(); 
    } 
}

contraejemplo:

for (String item : list) { if ("1".equals(item)) { list.remove(item); } }

说明:以上代码的执行结果肯定会出乎大家的意料,那么试一下把“1”换成“2”,会是同样的 结果吗?

  1. [Obligatorio] en la versión JDK7 y superior, clase de implementación Comparador para satisfacer las tres condiciones siguientes, o Arrays.sort, Collections.sort se informó IllegalArgumentException.
    Descripción: las tres condiciones siguientes
         1) X, Y, y un resultado de comparación resultado de la comparación y, x es el contrario.
         2) x> y, y> z, entonces x> z.
         3) x = y, a continuación, x, z resultado de comparación y y, z el mismo resultado de la comparación.

Anti Ejemplo: El siguiente ejemplo no maneja igual, puede producirse una excepción en el uso real:

new Comparator<Student>() { 
@Override 
public int compare(Student o1, Student o2) { 
    return o1.getId() > o2.getId() ? 1 : -1; 
    } 
}; 
  1. [Recomendado] cuando un conjunto genérico de definiciones, JDK7 y por encima de, la sintaxis uso de diamante o completo omitirse.

说明:菱形泛型,即 diamond,直接使用<>来指代前边已经指定的类型。

Ejemplos positivos:

// <> diamond 方式 
HashMap<String, String> userCache = new HashMap<>(16); 
// 全省略方式 
ArrayList<User> users = new ArrayList(10);
  1. [Recomendado] cuando se inicializa una colección, el valor inicial de un tamaño de conjunto especificado.

说明:HashMap 使用 HashMap(int initialCapacity) 初始化。
正例:initialCapacity = (需要存储的元素个数 / 负载因子) + 1。注意负载因子(即 loader factor)默认为 0.75,如果暂时无法确定初始值大小,请设置为 16(即默认值)。
反例:HashMap 需要放置 1024 个元素,由于没有设置容量初始大小,随着元素不断增加,容 量 7 次被迫扩大,resize 需要重建 hash 表,严重影响性能。

  1. [Recomendado] Uso entrySet atravesar colección Mapa de clases KV, en lugar de modo de conjunto de claves para atravesar.

说明:keySet 其实是遍历了 2 次,一次是转为 Iterator 对象,另一次是从 hashMap 中取出 key 所对应的 value。而 entrySet 只是遍历了一次就把 key 和 value 都放到了 entry 中,效 率更高。如果是 JDK8,使用 Map.foreach 方法。
正例:values()返回的是 V 值集合,是一个 list 集合对象;keySet()返回的是 K 值集合,是一个 Set 集合对象;entrySet()返回的是 K-V 值组合集合。

  1. [Recomendado] conjunto de Mapa de altura clase de atención K / V puede almacenar valor nulo, el siguiente formulario:
Colecciones Llave Valor súper explicación
Tabla de picadillo No permite la nula No permite la nula Diccionario Seguridad para subprocesos
ConcurrentHashMap No permite la nula No permite la nula AbstractMap técnica de segmentación de bloqueo (JDK8: CAS)
TreeMap No permite la nula será nula AbstractMap seguro para hilos
HashMap será nula será nula AbstractMap seguro para hilos

反例: 由于 HashMap 的干扰,很多人认为 ConcurrentHashMap 是可以置入 null 值,而事实上, 存储 null 值时会抛出 NPE 异常。

  1. [Referencia] uso racional de orden (clasificar) y una buena estabilidad del conjunto (orden), para evitar los efectos negativos de las colecciones de trastorno (Desordenar) y la inestabilidad (unorder) trae.

说明:有序性是指遍历的结果是按某种比较规则依次排列的。稳定性指集合每次遍历的元素次序是一定的。如:ArrayList 是 order/unsort;HashMap 是 unorder/unsort;TreeSet 是order/sort。

  1. [Referencia] con un elemento único conjunto característico, puede ir rápidamente a un conjunto de reoperación, para evitar el uso de la lista contiene método de atravesar, en comparación con reintento.
Publicado 74 artículos originales · ganado elogios 180 · Vistas a 30000 +

Supongo que te gusta

Origin blog.csdn.net/Fdog_/article/details/104897606
Recomendado
Clasificación