Java collection framework (1) -Interfaz de recopilación

1. Descripción general del marco de recopilación

1. Las colecciones y las matrices son estructuras que realizan operaciones de almacenamiento en múltiples datos, lo que se conoce como
descripción del contenedor java : el almacenamiento en este momento se refiere al almacenamiento en el nivel de memoria y no involucra operaciones persistentes (.txt.jpg.avi base de datos, etc.) )
2.1 Las características de la matriz en el almacenamiento de datos múltiples:
① Una vez inicializado, su longitud es fija
② Una vez que se definen los datos, se determina el tipo de su elemento, y solo podemos operar en el tipo de datos especificado.
③ Por ejemplo String [] arr, int [] arr1, Object [] arr2

2.1 La determinación de la matriz en el almacenamiento de datos múltiples:
① Una vez inicializada, su longitud no puede modificarse.
② Los métodos provistos en la matriz son muy limitados. Es muy inconveniente e ineficiente para operaciones como agregar, eliminar, modificar e insertar datos.
③ La necesidad de obtener el número real de elementos en la matriz, la matriz no tiene atributos o métodos listos para usar.
④ Las características de la matriz: ordenadas, repetibles, para requisitos no ordenados, no repetibles, no pueden cumplir

En segundo lugar, el marco de recopilación, utilizado principalmente

Inserte la descripción de la imagen aquí

La colección Java se puede dividir en dos sistemas: Colección y Mapa

Interfaz de recopilación: una sola columna de datos, que define el acceso a una recopilación de objetos

1.Lista: almacenamiento ordenado, datos repetibles- "matriz dinámica"

ArrayList 、 LinkedList 、 Vector

2.Conjunto: almacenar colección no ordenada, no repetible, la parte inferior es una lista vinculada

HashSet 、 LinkedHashSet 、 TreeSet

Interfaz de mapa: datos de doble columna, guardar datos con la relación de mapeo "par clave-valor"

HashMap 、 LinkedHashMap 、 TreeMap 、 Hashtable 、 Propiedades

Tres, el uso de métodos en la interfaz de la Colección

Personalizar una clase (Persona) para pruebas de datos

public class Person implements Comparable {
   public String name;
   public  int age;

   public String getName() {
       return name;
   }

   public void setName(String name) {
       this.name = name;
   }

   public int getAge() {
       return age;
   }

   public void setAge(int age) {
       this.age = age;
   }

   @Override
   public String toString() {
       return "Person{" +
               "name='" + name + '\'' +
               ", age=" + age +
               '}';
   }

   public Person() {
   }

   public Person(String name, int age) {
       this.name = name;
       this.age = age;
   }
   //重写equals()方法,比较判断contains()中的比较问题

   @Override
   public boolean equals(Object o) {
       if (this == o) return true;
       if (o == null || getClass() != o.getClass()) return false;

       Person person = (Person) o;

       if (age != person.age) return false;
       return name != null ? name.equals(person.name) : person.name == null;
   }

   @Override
   public int hashCode() {
       int result = name != null ? name.hashCode() : 0;
       result = 31 * result + age;
       return result;
   }
   //按照姓名从小到大排列,年龄从小到大排序
   @Override
   public int compareTo(Object o) {
      if (o instanceof Person){
          Person person = (Person)o;
//           return  this.name.compareTo(person.name);
          int compare = this.name.compareTo(person.name);
          if (compare !=0){
              return compare;
          }else {
              return  Integer.compare(this.age,person.age);
          }
      }else {
          throw  new RuntimeException("输入的类型不匹配!");
      }
   }
}
Lista de métodos comunes de recolección

1.add (Object o); Hable sobre el elemento o agregado a la colección coll
2.size (): Obtenga el número de elementos agregados
3.addAll (Collection coll): Agregue los elementos de la colección coll a la colección actual
4.clear (): Borrar elementos de la colección
5.isEmpty (): Determinar si la colección actual está vacía
6.contains (Object o): Determinar si la colección actual contiene obj
7.containsAll (Collection coll1): Determinar si todos los elementos en el parámetro formal coll1 están en la corriente de recogida
8.remove (Object o): elementos obj eliminar de la colección actual
9.removeAll (colección coll1): eliminado del conjunto actual de todos los elementos coll1 en
10.retainAll (): obtener la colección actual y una colección de coll1 Intersecar y devolver la colección actual (conservar la misma, eliminar la diferente)
11.equals (Object o): para devolver true, es necesario que los elementos de la colección formal de la colección actual y el método sean los mismos (juzgando la colección actual y el parámetro formal Object Si los valores son los mismos)
12. hashCode () devuelve el valor hash del objeto actual
13. Collection—> Array: toArray ()
14.iterator (): devuelve una instancia de la interfaz Iterator, utilizada para atravesar los elementos de la colección

  Collection coll = new ArrayList();

        //1.add(Object o); 讲元素o添加到集合coll中
        coll.add("aa");
        coll.add("bb");
        coll.add("cc");
        coll.add(123);//自动装箱
        coll.add(new Date());

        //2.size():获取添加的元素个数
        System.out.println(coll.size());//4

        Collection coll1 = new ArrayList();

        //3.addAll(Collection coll):将coll集合中的元素添加到当前集合中
        coll1.add(456);
        coll1.add("abc");
        coll.addAll(coll1);

        System.out.println(coll.size());//6


        //4.clear():清空集合元素
        coll.clear();//0

        //5.isEmpty():判断当前集合是否为空
        System.out.println(coll.isEmpty());//true
        
	@Test
    public void test(){
        Collection coll = new ArrayList();
        coll.add(123);
        coll.add(456);
        coll.add(new String("Tom"));
        coll.add(false);
        coll.add(new Person("Tom",20));
        Person p = new Person("Jerry",20);
        coll.add(p);
        //6.contains(Object o):判断当前集合是否包含obj
        //我们会在判断时调用obj所在对象类的equals()
        boolean contains = coll.contains(123);
        System.out.println(contains);
        System.out.println(coll.contains(p));//true
        System.out.println(coll.contains(new Person("Jerry",20)));//true

        //7.containsAll(Collection coll1):判断形参coll1中的所有元素是否在当前集合中
        Collection coll1 = Arrays.asList(123,456,789);
        System.out.println(coll.containsAll(coll1));
    }
     @Test
    public void test1(){
        //8.remove(Object o):从当前集合中删除obj元素
        Collection coll = new ArrayList();
        coll.add(123);
        coll.add(456);
        coll.add(new String("Tom"));
        coll.add(false);
        coll.add(new Person("Tom",20));

        coll.remove(123);
        System.out.println(coll);//[456, Tom, false, Person{name='Tom', age=20}]

        boolean remove = coll.remove(1234);
        System.out.println(remove);//false

        boolean tom = coll.remove(new Person("Tom", 20));
        System.out.println(tom);//true

        //9.removeAll(Collection coll1):从当前集合中移除coll1中的所有元素
        Collection coll1 = Arrays.asList(123,456);
        coll.removeAll(coll1);
        System.out.println(coll);//[Tom, false, Person{name='Tom', age=20}]
    }
     @Test
    public void test2(){
        Collection coll = new ArrayList();
        coll.add(123);
        coll.add(456);
        coll.add(new String("Tom"));
        coll.add(false);
        coll.add(new Person("Tom",20));

        //10.retainAll():获取当前集合和coll1集合的交集,并返回当前集合(保留一样的,去掉不一样的)
       // Collection  coll1 = Arrays.asList(123,456,789);
       // coll.retainAll(coll1);
        //System.out.println(coll);//[123, 456]

        //11.equals(Object o):要想返回true,现需要当前集合和方法的形参集合的元素相同
        // (判断当前集合和形参Object的值是否相同)
        Collection coll1 = new ArrayList();
        coll1.add(123);
        coll1.add(456);
        coll1.add(new String("Tom"));
        coll1.add(false);
        coll1.add(new Person("Tom",20));
        //若现在集合中的元素交换位置的话,就会是false,因为(new ArrayList())的要考虑顺序问题
        System.out.println(coll.equals(coll1));//true

    }
     @Test
    public void test3(){
        Collection coll = new ArrayList();
        coll.add(123);
        coll.add(456);
        coll.add(new String("Tom"));
        coll.add(false);
        coll.add(new Person("Tom",20));

        //12.hashCode()返回当前对象的哈希值
        System.out.println(coll.hashCode());//239446066

        //13.集合 --->数组:toArray()
        Object[] arr = coll.toArray();
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+"\t");//123	456	Tom	false	Person{name='Tom', age=20}
        }

        //拓展:数据 ---> 集合:调用ArrayList的静态方法asList()
        List<String> list = Arrays.asList(new String[]{"AA", "BB", "CC"});
        System.out.println(list);//[AA, BB, CC]
        //将其识别为一个元素,不是两个
        List ints = Arrays.asList(new int[]{123, 456, 789});
        System.out.println(ints);//[[I@4f2410ac] .size()的话,值为1

        //14.iterator():返回Iterator接口的实例,用于遍历集合元素 ,在IteratorTest使用
    }

Cuatro, el uso de iteradores

1. La operación transversal de los elementos de la colección, utilizando la interfaz Iterator (es un tipo de patrón de diseño), utilizada principalmente para recorrer los elementos en la colección de la Colección.

Inserte la descripción de la imagen aquí
Modo iterador: proporcione un método para acceder a cada elemento en un objeto contenedor sin exponer los detalles internos del objeto.
Este modo es para el contenedor. Hay muchos objetos (colecciones, matrices) en el contenedor
1. Métodos de colección hasNext () y next ()
2. Cada vez que se llama a un método iterador () en un objeto de la colección, se obtiene un nuevo objeto iterador. Los
subíndices predeterminados están antes del primer elemento.
3. Quitar () se define internamente. Puede eliminar los elementos de la colección durante el recorrido. Este método es diferente de llamar a remove () directamente en la colección.


public class IteratorTest {

    @Test
    public void test() {
        Collection coll = new ArrayList();
        coll.add(123);
        coll.add(456);
        coll.add(new String("Tom"));
        coll.add(false);
        coll.add(new Person("Tom", 20));

        Iterator iterator = coll.iterator();
        //方式一:取决于集合中有多少个元素
        //next():①指针下移 ②将下移以后集合位置上的元素返回
//        System.out.println(iterator.next());
//        System.out.println(iterator.next());
//        System.out.println(iterator.next());
//        System.out.println(iterator.next());
//        System.out.println(iterator.next());
        //抛异常,没有下一个元素了  java.util.NoSuchElementException
//        System.out.println(iterator.next());

        //方式二:不推荐
//        for (int i = 0; i < coll.size(); i++) {
//            System.out.println(iterator.next());
//        }
        //方式三:推荐
        //hasNext():判断是否还有下一个元素,有true,没有false
        while (iterator.hasNext()){
            //next():①指针下移 ②将下移以后集合位置上的元素返回
            System.out.print(iterator.next()+"\t");//123	456	Tom	false	Person{name='Tom', age=20}
        }
    }
    @Test
    public void test1(){
        Collection coll = new ArrayList();
        coll.add(123);
        coll.add(456);
        coll.add(new String("Tom"));
        coll.add(false);
        coll.add(new Person("Tom", 20));

        //错误发生一:判断为空时,输出的是下一条的数据信息
//        Iterator iterator = coll.iterator();
//        while (iterator.next() !=null){
//            System.out.println(iterator.next());//456 false
//        }
        //错误发生二:coll.iterator()会返回新的iterator对象,在hasNext就一直是第一个元素
        while (coll.iterator().hasNext()){
            System.out.println(coll.iterator().next());//123循环输出
        }
    }

    //测试remove()
    @Test
    public void test2(){
        Collection coll = new ArrayList();
        coll.add(123);
        coll.add(456);
        coll.add(new String("Tom"));
        coll.add(false);
        coll.add(new Person("Tom", 20));

        Iterator iterator = coll.iterator();
        //删除集合中的数据
        while (iterator.hasNext()){
            //如何还没有调用next(),就删除会抛异常,因为现在集合为空,没有执行next,指针不在集合中
            // iterator.remove();
            Object next = iterator.next();
            if ("Tom".equals(next)){
                iterator.remove();
            }
        }
        //需要重新获取一个新的对象
         iterator = coll.iterator();
        //重新遍历集合
        while (iterator.hasNext()){
            System.out.print(iterator.next() +"\t");//123	456	false	Person{name='Tom', age=20}
        }
    }
}

Cinco, mejorar el bucle for

jdk5.0 agrega un nuevo bucle foreach para atravesar colecciones y matrices

public class ForTest {

    @Test
    public void test(){
        Collection coll = new ArrayList();
        coll.add(123);
        coll.add(456);
        coll.add(new String("Tom"));
        coll.add(false);
        coll.add(new Person("Tom", 20));

        //for(集合元素类型 局部遍历 :集合对象)
        for (Object obj : coll){//内部调用任然是迭代器
            System.out.println(obj);
        }
    }
    //练习题
    @Test
    public void test1(){
        String[] str = new String[]{"MM","MM","MM"};
        //普通的for循环,改变String的值
//        for (int i = 0; i < str.length; i++) {
//            str[i] = "GG";
//        }
        //增强for循环,新增变量String s:不会改变原来的值,重新赋了一个值
        for (String s :str){
            s = "GG";
        }

        for (int i = 0; i < str.length; i++) {
            System.out.println(str[i]);
        }
    }
}
Publicado 19 artículos originales · elogiado 0 · visitas 484

Supongo que te gusta

Origin blog.csdn.net/weixin_43244120/article/details/105496021
Recomendado
Clasificación