MapСводка

искусственный интеллект

Карта: Добавляет пару элементов за раз. Коллекция добавляет по одному элементу за раз.

Карта также называется коллекцией с двумя столбцами, а коллекция Collection называется коллекцией с одним столбцом.

На самом деле в коллекции карт хранится пара ключ-значение.

В коллекции карт должна быть гарантирована уникальность ключей.

Общий метод:

1, доп.

value put(key,value): возвращает предыдущее значение, связанное с ключом, или ноль, если нет.

2. Удалить.

  void clear(): очищает коллекцию карт.

value remove(key): вывернуть пару ключ-значение в соответствии с указанным ключом.

3. Суждение.

         boolean containsKey(key):

         boolean containsValue(value):

         boolean isEmpty();

4. Получить.

value get(key): получить значение по ключу или вернуть null, если такого ключа нет.

Конечно, вы можете вернуть null, чтобы определить, включен ли указанный ключ.

int size(): получить количество пар ключ-значение.

пример:

         public static void main(String[] args) {

                  Map<Integer,String> map = new HashMap<Integer,String>();

method(map);

                  method_2(map);

         }

         public static void method_2(Map<Integer,String> map){

                 

                  map.put(8,"zhaoliu");

                  map.put(2,"zhaoliu");

                  map.put(7,"xiaoqiang");

                  map.put(6,"wangcai");

                  Collection<String> values = map.values();

                  Iterator<String> it2 = values.iterator();

                  while(it2.hasNext()){

                          System.out.println(it2.next());

                  }

                  /*

* Первый обход коллекции Map

* Вы можете выполнить итерацию, преобразовав Map в set.

* Нашел другой способ. входНабор.

* Этот метод сохраняет отношение сопоставления между ключами и значениями в виде объектов в коллекции Set, а тип этого отношения сопоставления — тип Map.Entry (свидетельство о браке)

                   */

                  Set<Map.Entry<Integer, String>> entrySet = map.entrySet();

                  Iterator<Map.Entry<Integer, String>> it = entrySet.iterator();

                  while(it.hasNext()){

                          Map.Entry<Integer, String> me = it.next();

                          Integer key = me.getKey();

                          String value = me.getValue();

                          System.out.println(key+"::::"+value);

                  }

//Второй способ обхода коллекции Map

//Удалить все элементы на карте.

//В принципе, используйте метод keySet для получения коллекции Set, где находятся все ключи в карте, и получайте каждый ключ через итератор Set,

//Получите соответствующее значение каждого ключа с помощью метода get коллекции карт.

                  Set<Integer> keySet = map.keySet();

                  Iterator<Integer> it = keySet.iterator();

                  while(it.hasNext()){

                          Integer key = it.next();

                          String value = map.get(key);

                          System.out.println(key+":"+value);

                  }

         }

public static void method(Map map){//Номер и имя учащегося

// Добавляем элементы.

                  System.out.println(map.put(8, "wangcai"));//null

System.out.println(map.put(8, "xiaoqiang"));//wangcai хранит тот же ключ, значение будет перезаписано.

                  map.put(2,"zhangsan");

                  map.put(7,"zhaoliu");

//Удалить.

                  System.out.println("remove:"+map.remove(2));

//судить.

                  System.out.println("containskey:"+map.containsKey(7));

//Получать.

                  System.out.println("get:"+map.get(6));

                  System.out.println(map);

                  Outer.Inner.show();

         }

Обычно используемые подклассы карты:

|--Hashtable : Внутренняя структура представляет собой хеш-таблицу, которая синхронизируется. Null не допускается в качестве ключа и null в качестве значения.

|--Properties: используется для хранения информации файла конфигурации пары ключ-значение, которую можно комбинировать с технологией ввода-вывода.

|--HashMap : Внутренняя структура представляет собой несинхронизированную хеш-таблицу. Разрешить null в качестве ключа и null в качестве значения.

|--TreeMap : Внутренняя структура представляет собой двоичное дерево, не синхронизированное. Ключи в коллекции Map можно сортировать.

Пример 1: Пример приложения HashMap:

public  class Person {

         public int hashCode() {

                  final int prime = 31;

                  int result = 1;

                  result = prime * result + age;

                  result = prime * result + ((name == null) ? 0 : name.hashCode());

                  return result;

         }

 

Примечание. В примере в объекте Person есть дубликаты, но если Person не реализует два метода hashCode() и equals(Object obj), он не может сравнивать хэш-значение объекта на равенство, поэтому вы увидите два в результате Тот же результат, если вы реализуете эти два метода, вы можете сравнить, равны ли объекты, и если они равны, перезаписать значение исходного объекта. Реализуйте методы этих двух объектов: Source->Generate hashCode() и equals() Затем выберите свойства для сравнения

         public boolean equals(Object obj) {

 

                  if (this == obj)

                          return true;

                  if (obj == null)

                          return false;

                  if (getClass() != obj.getClass())

                          return false;

                  Person other = (Person) obj;

                  if (age != other.age)

                          return false;

                  if (name == null) {

                          if (other.name != null)

                                   return false;

                  } else if (!name.equals(other.name))

                          return false;

                  return true;

         }

         private String name;

         private int age;

         public Person() {

                  super();

                 

         }

         public  String  getName() {

                  return name;

         }

         public int getAge() {

                  return age;

         }

         public Person(String name, int age) {

                  super();

                  this.name = name;

                  this.age = age;

         }

}

 

import java.util.HashMap;

import java.util.Iterator;

 

public class ThreadDemo {

         public static void main(String[] args) {

                  HashMap<Person, String> hMap = new HashMap<Person, String>();

                  hMap.put(newPerson("lisi", 23), "Пекин");

                  hMap.put(newPerson("zhaolliu", 45), "Шанхай");

                  hMap.put(newPerson("xiaoqiang", 56), "Пекин");

                  hMap.put(newPerson("wangcai", 21), "Dalian");

                  hMap.put(newPerson("lisi", 23), "Пекин");

                  Iterator<Person> it = hMap.keySet().iterator();

                  while (it.hasNext()) {

                          Person key = it.next();

                          String value = hMap.get(key);

                          System.out.println(key.getName() + ":" + key.getAge() + "---"

                                            + value);

                  }

         }

}

Пример 2, использование TreeMap.

package aaa;

public  class Person {

         private String name;

         private int age;

         public Person() {

                  super();

         }

         public  String  getName() {

                  return name;

         }

         public int getAge() {

                  return age;

         }

         public Person(String name, int age) {

                  super();

                  this.name = name;

                  this.age = age;

         }

}

package aaa;

public class Student extends Person {

         public Student() {

                  super();

         }

         public Student(String name, int age) {

                  super(name, age);

         }

}

package aaa;

import java.util.TreeMap;

import java.util.Iterator;

public class ThreadDemo {

         public static void main(String[] args) {

                  TreeMap<Student, String> hMap = new TreeMap<Student, String>(new ComparetorByName());

                  hMap.put(newСтудент("лиси", 23), "Пекин");

                  hMap.put(newСтудент ("жаоллиу", 45), "Шанхай");

                  hMap.put(newСтудент("сяоцян", 56), "Пекин");

                  hMap.put(newСтудент("ванцай", 21), "Далянь");

                  hMap.put(newСтудент("lisi", 23), "Токио");

                  Iterator<Student> it = hMap.keySet().iterator();

                  while (it.hasNext()) {

                          Person key = it.next();

                          String value = hMap.get(key);

                          System.out.println(key.getName() + ":" + key.getAge() + "---"

                                            + value);

 

Выходной результат: lisi: 23 --- Tokyo wangcai: 21 --- Dalian xiaoqiang: 56 --- Пекин zhaolliu: 45 --- Шанхай

                  }

 

         }

}

 

 

 

 

Пример 3, пример использования LinkedHashMap

import java.util.Iterator;

import java.util.LinkedHashMap;

import java.util.Map;

import java.util.Set;

public class ThreadDemo {

 

         public static void main(String[] args) {

         LinkedHashMap<Integer, String> linkedHashMap=new LinkedHashMap<>();

         linkedHashMap.put(2, "sd");

         linkedHashMap.put(3, "qwdsa");

         linkedHashMap.put(1, "dfsd");

         linkedHashMap.put(9, "sewq");

         Iterator<Map.Entry<Integer, String>> iterator=linkedHashMap.entrySet().iterator();

         while (iterator.hasNext()) {

                  Map.Entry<Integer, String> mEntry=iterator.next();

                  Integer keyInteger=mEntry.getKey();

                  String valueString=mEntry.getValue();

                                   System.out.println(keyInteger+":"+valueString);

 

Результат вывода: 2:sd3:qwdsa1:dfsd9:sewq Результат упорядочен

         }

 

         }

}

 

 

 

 

 

Упражнение: "fdgavcbsacdfs" Получить количество вхождений каждой буквы в строке.

package aaa;

import java.util.Iterator;

import java.util.Map;

import java.util.TreeMap;

/*

* Упражнение:

 * "fdgavcbsacdfs" Получить количество вхождений каждой буквы в строку.

* Результат печати должен быть: a(2)b(1)...;

* Идеи:

* Анализ результатов показал, что между буквами и временем существует взаимосвязь. И таких отношений много.

* Многие из них необходимо хранить Контейнеры, в которых могут храниться отношения сопоставления, включают массивы и коллекции карт.

* Пронумерованы ли отношения в одну сторону по порядку? нет!

* То есть использовать коллекцию Map. Также установлено, что партия, которая может гарантировать уникальность, имеет такой порядок, как a b c ...

* Таким образом, вы можете использовать коллекцию TreeMap.

* Этот набор должен в конечном счете хранить соответствие между буквами и временем.

* 1, потому что операция выполняется над буквами в строке, поэтому сначала превратите строку в массив символов.

*2, просмотрите массив символов и используйте каждую букву в качестве ключа для поиска в таблице коллекции карт.

* Если буквенный ключ не существует, сохраните букву как ключ 1 как значение в коллекции карт.

* Если буквенный ключ существует, соответствующее значение буквенного ключа вынимается и +1 сохраняется, а значение после буквы и +1 сохраняется в наборе карт,

* Ключи с одинаковым значением будут перезаписаны. Таким образом, количество раз записывается буква.

* 3, в конце обхода коллекция карт записывает количество вхождений всех букв.oy.

*/

public class ThreadDemo {

         /**

          * @param args

          */

         public static void main(String[] args) {

                  String str = "fdg+avAdc  bs5dDa9c-dfs";

                  String s = getCharCount(str);

                  System.out.println(s);

         }

         public static String getCharCount(String str) {

// Преобразование строки в массив символов

                  char[] chs = str.toCharArray();

//Определяем таблицу коллекции карт.

                  Map<Character,Integer> map = new TreeMap<Character,Integer>();

                  for (int i = 0; i < chs.length; i++) {

                          if(!(chs[i]>='a' && chs[i]<='z' || chs[i]>='A' && chs[i]<='Z'))

                                   continue;

//Используйте буквы в массиве в качестве ключей для поиска в таблице карты.   

                          Integer value = map.get(chs[i]);

                          map.put(chs[i], value==null?1:value+1);                        

                  }

                  return mapToString(map);

         }

         private static String mapToString(Map<Character, Integer> map) {

                  StringBuilder sb = new StringBuilder();

                  Iterator<Character> it = map.keySet().iterator();

                  while(it.hasNext()){

                          Character key = it.next();

                          Integer value = map.get(key);

                          sb.append(key+"("+value+")");

                  }

                  return sb.toString();

         }

}