// onjava/Countries.java// (c)2017 MindView LLC: see Copyright.txt// We make no guarantees that this code is fit for any purpose.// Visit http://OnJava8.com for more book information.// "Flyweight" Maps and Lists of sample data// {java onjava.Countries}package onjava;import java.util.*;public class Countries {public static final String[][] DATA = {// Africa{"ALGERIA","Algiers"},{"ANGOLA","Luanda"},{"BENIN","Porto-Novo"},{"BOTSWANA","Gaberone"},{"BURKINA FASO","Ouagadougou"},{"BURUNDI","Bujumbura"},{"CAMEROON","Yaounde"},{"CAPE VERDE","Praia"},{"CENTRAL AFRICAN REPUBLIC","Bangui"},{"CHAD","N'djamena"},{"COMOROS","Moroni"},{"CONGO","Brazzaville"},{"DJIBOUTI","Dijibouti"},{"EGYPT","Cairo"},{"EQUATORIAL GUINEA","Malabo"},{"ERITREA","Asmara"},{"ETHIOPIA","Addis Ababa"},{"GABON","Libreville"},{"THE GAMBIA","Banjul"},{"GHANA","Accra"},{"GUINEA","Conakry"},{"BISSAU","Bissau"},{"COTE D'IVOIR (IVORY COAST)","Yamoussoukro"},{"KENYA","Nairobi"},{"LESOTHO","Maseru"},{"LIBERIA","Monrovia"},{"LIBYA","Tripoli"},{"MADAGASCAR","Antananarivo"},{"MALAWI","Lilongwe"},{"MALI","Bamako"},{"MAURITANIA","Nouakchott"},{"MAURITIUS","Port Louis"},{"MOROCCO","Rabat"},{"MOZAMBIQUE","Maputo"},{"NAMIBIA","Windhoek"},{"NIGER","Niamey"},{"NIGERIA","Abuja"},{"RWANDA","Kigali"},{"SAO TOME E PRINCIPE","Sao Tome"},{"SENEGAL","Dakar"},{"SEYCHELLES","Victoria"},{"SIERRA LEONE","Freetown"},{"SOMALIA","Mogadishu"},{"SOUTH AFRICA","Pretoria/Cape Town"},{"SUDAN","Khartoum"},{"SWAZILAND","Mbabane"},{"TANZANIA","Dodoma"},{"TOGO","Lome"},{"TUNISIA","Tunis"},{"UGANDA","Kampala"},{"DEMOCRATIC REPUBLIC OF THE CONGO (ZAIRE)","Kinshasa"},{"ZAMBIA","Lusaka"},{"ZIMBABWE","Harare"},// Asia{"AFGHANISTAN","Kabul"},{"BAHRAIN","Manama"},{"BANGLADESH","Dhaka"},{"BHUTAN","Thimphu"},{"BRUNEI","Bandar Seri Begawan"},{"CAMBODIA","Phnom Penh"},{"CHINA","Beijing"},{"CYPRUS","Nicosia"},{"INDIA","New Delhi"},{"INDONESIA","Jakarta"},{"IRAN","Tehran"},{"IRAQ","Baghdad"},{"ISRAEL","Jerusalem"},{"JAPAN","Tokyo"},{"JORDAN","Amman"},{"KUWAIT","Kuwait City"},{"LAOS","Vientiane"},{"LEBANON","Beirut"},{"MALAYSIA","Kuala Lumpur"},{"THE MALDIVES","Male"},{"MONGOLIA","Ulan Bator"},{"MYANMAR (BURMA)","Rangoon"},{"NEPAL","Katmandu"},{"NORTH KOREA","P'yongyang"},{"OMAN","Muscat"},{"PAKISTAN","Islamabad"},{"PHILIPPINES","Manila"},{"QATAR","Doha"},{"SAUDI ARABIA","Riyadh"},{"SINGAPORE","Singapore"},{"SOUTH KOREA","Seoul"},{"SRI LANKA","Colombo"},{"SYRIA","Damascus"},{"TAIWAN (REPUBLIC OF CHINA)","Taipei"},{"THAILAND","Bangkok"},{"TURKEY","Ankara"},{"UNITED ARAB EMIRATES","Abu Dhabi"},{"VIETNAM","Hanoi"},{"YEMEN","Sana'a"},// Australia and Oceania{"AUSTRALIA","Canberra"},{"FIJI","Suva"},{"KIRIBATI","Bairiki"},{"MARSHALL ISLANDS","Dalap-Uliga-Darrit"},{"MICRONESIA","Palikir"},{"NAURU","Yaren"},{"NEW ZEALAND","Wellington"},{"PALAU","Koror"},{"PAPUA NEW GUINEA","Port Moresby"},{"SOLOMON ISLANDS","Honaira"},{"TONGA","Nuku'alofa"},{"TUVALU","Fongafale"},{"VANUATU","Port Vila"},{"WESTERN SAMOA","Apia"},// Eastern Europe and former USSR{"ARMENIA","Yerevan"},{"AZERBAIJAN","Baku"},{"BELARUS (BYELORUSSIA)","Minsk"},{"BULGARIA","Sofia"},{"GEORGIA","Tbilisi"},{"KAZAKSTAN","Almaty"},{"KYRGYZSTAN","Alma-Ata"},{"MOLDOVA","Chisinau"},{"RUSSIA","Moscow"},{"TAJIKISTAN","Dushanbe"},{"TURKMENISTAN","Ashkabad"},{"UKRAINE","Kyiv"},{"UZBEKISTAN","Tashkent"},// Europe{"ALBANIA","Tirana"},{"ANDORRA","Andorra la Vella"},{"AUSTRIA","Vienna"},{"BELGIUM","Brussels"},{"BOSNIA-HERZEGOVINA","Sarajevo"},{"CROATIA","Zagreb"},{"CZECH REPUBLIC","Prague"},{"DENMARK","Copenhagen"},{"ESTONIA","Tallinn"},{"FINLAND","Helsinki"},{"FRANCE","Paris"},{"GERMANY","Berlin"},{"GREECE","Athens"},{"HUNGARY","Budapest"},{"ICELAND","Reykjavik"},{"IRELAND","Dublin"},{"ITALY","Rome"},{"LATVIA","Riga"},{"LIECHTENSTEIN","Vaduz"},{"LITHUANIA","Vilnius"},{"LUXEMBOURG","Luxembourg"},{"MACEDONIA","Skopje"},{"MALTA","Valletta"},{"MONACO","Monaco"},{"MONTENEGRO","Podgorica"},{"THE NETHERLANDS","Amsterdam"},{"NORWAY","Oslo"},{"POLAND","Warsaw"},{"PORTUGAL","Lisbon"},{"ROMANIA","Bucharest"},{"SAN MARINO","San Marino"},{"SERBIA","Belgrade"},{"SLOVAKIA","Bratislava"},{"SLOVENIA","Ljuijana"},{"SPAIN","Madrid"},{"SWEDEN","Stockholm"},{"SWITZERLAND","Berne"},{"UNITED KINGDOM","London"},{"VATICAN CITY","Vatican City"},// North and Central America{"ANTIGUA AND BARBUDA","Saint John's"},{"BAHAMAS","Nassau"},{"BARBADOS","Bridgetown"},{"BELIZE","Belmopan"},{"CANADA","Ottawa"},{"COSTA RICA","San Jose"},{"CUBA","Havana"},{"DOMINICA","Roseau"},{"DOMINICAN REPUBLIC","Santo Domingo"},{"EL SALVADOR","San Salvador"},{"GRENADA","Saint George's"},{"GUATEMALA","Guatemala City"},{"HAITI","Port-au-Prince"},{"HONDURAS","Tegucigalpa"},{"JAMAICA","Kingston"},{"MEXICO","Mexico City"},{"NICARAGUA","Managua"},{"PANAMA","Panama City"},{"ST. KITTS AND NEVIS","Basseterre"},{"ST. LUCIA","Castries"},{"ST. VINCENT AND THE GRENADINES","Kingstown"},{"UNITED STATES OF AMERICA","Washington, D.C."},// South America{"ARGENTINA","Buenos Aires"},{"BOLIVIA","Sucre (legal)/La Paz(administrative)"},{"BRAZIL","Brasilia"},{"CHILE","Santiago"},{"COLOMBIA","Bogota"},{"ECUADOR","Quito"},{"GUYANA","Georgetown"},{"PARAGUAY","Asuncion"},{"PERU","Lima"},{"SURINAME","Paramaribo"},{"TRINIDAD AND TOBAGO","Port of Spain"},{"URUGUAY","Montevideo"},{"VENEZUELA","Caracas"},};// Use AbstractMap by implementing entrySet()private static class FlyweightMapextends AbstractMap<String,String> {private static class Entryimplements Map.Entry<String,String> {int index;Entry(int index) { this.index = index; }@Overridepublic boolean equals(Object o) {return o instanceof FlyweightMap &&Objects.equals(DATA[index][0], o);}@Overridepublic int hashCode() {return Objects.hashCode(DATA[index][0]);}@Overridepublic String getKey() { return DATA[index][0]; }@Overridepublic String getValue() {return DATA[index][1];}@Overridepublic String setValue(String value) {throw new UnsupportedOperationException();}}// Implement size() & iterator() for AbstractSet:static class EntrySetextends AbstractSet<Map.Entry<String,String>> {private int size;EntrySet(int size) {if(size < 0)this.size = 0;// Can't be any bigger than the array:else if(size > DATA.length)this.size = DATA.length;elsethis.size = size;}@Overridepublic int size() { return size; }private class Iterimplements Iterator<Map.Entry<String,String>> {// Only one Entry object per Iterator:private Entry entry = new Entry(-1);@Overridepublic boolean hasNext() {return entry.index < size - 1;}@Overridepublic Map.Entry<String,String> next() {entry.index++;return entry;}@Overridepublic void remove() {throw new UnsupportedOperationException();}}@OverridepublicIterator<Map.Entry<String,String>> iterator() {return new Iter();}}private staticSet<Map.Entry<String,String>> entries =new EntrySet(DATA.length);@Overridepublic Set<Map.Entry<String,String>> entrySet() {return entries;}}// Create a partial map of 'size' countries:static Map<String,String> select(final int size) {return new FlyweightMap() {@Overridepublic Set<Map.Entry<String,String>> entrySet() {return new EntrySet(size);}};}static Map<String,String> map = new FlyweightMap();public static Map<String,String> capitals() {return map; // The entire map}public static Map<String,String> capitals(int size) {return select(size); // A partial map}static List<String> names =new ArrayList<>(map.keySet());// All the names:public static List<String> names() { return names; }// A partial list:public static List<String> names(int size) {return new ArrayList<>(select(size).keySet());}public static void main(String[] args) {System.out.println(capitals(10));System.out.println(names(10));System.out.println(new HashMap<>(capitals(3)));System.out.println(new LinkedHashMap<>(capitals(3)));System.out.println(new TreeMap<>(capitals(3)));System.out.println(new Hashtable<>(capitals(3)));System.out.println(new HashSet<>(names(6)));System.out.println(new LinkedHashSet<>(names(6)));System.out.println(new TreeSet<>(names(6)));System.out.println(new ArrayList<>(names(6)));System.out.println(new LinkedList<>(names(6)));System.out.println(capitals().get("BRAZIL"));}}/* Output:{ALGERIA=Algiers, ANGOLA=Luanda, BENIN=Porto-Novo,BOTSWANA=Gaberone, BURKINA FASO=Ouagadougou,BURUNDI=Bujumbura, CAMEROON=Yaounde, CAPE VERDE=Praia,CENTRAL AFRICAN REPUBLIC=Bangui, CHAD=N'djamena}[ALGERIA, ANGOLA, BENIN, BOTSWANA, BURKINA FASO,BURUNDI, CAMEROON, CAPE VERDE, CENTRAL AFRICANREPUBLIC, CHAD]{BENIN=Porto-Novo, ANGOLA=Luanda, ALGERIA=Algiers}{ALGERIA=Algiers, ANGOLA=Luanda, BENIN=Porto-Novo}{ALGERIA=Algiers, ANGOLA=Luanda, BENIN=Porto-Novo}{ALGERIA=Algiers, ANGOLA=Luanda, BENIN=Porto-Novo}[BENIN, BOTSWANA, ANGOLA, BURKINA FASO, ALGERIA,BURUNDI][ALGERIA, ANGOLA, BENIN, BOTSWANA, BURKINA FASO,BURUNDI][ALGERIA, ANGOLA, BENIN, BOTSWANA, BURKINA FASO,BURUNDI][ALGERIA, ANGOLA, BENIN, BOTSWANA, BURKINA FASO,BURUNDI][ALGERIA, ANGOLA, BENIN, BOTSWANA, BURKINA FASO,BURUNDI]Brasilia*/
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。