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
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.
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]);
}
}
}