Карта: Добавляет пару элементов за раз. Коллекция добавляет по одному элементу за раз.
Карта также называется коллекцией с двумя столбцами, а коллекция 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
// Добавляем элементы.
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();
}
}