最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一文帶你深入了解Java的數(shù)據(jù)結(jié)構(gòu)

 更新時(shí)間:2023年05月04日 08:29:42   作者:無(wú)聲編碼器  
Java工具包提供了強(qiáng)大的數(shù)據(jù)結(jié)構(gòu)。這篇文章主要為大家詳細(xì)介紹了Java數(shù)據(jù)結(jié)構(gòu)中常用的幾種接口和類(lèi),感興趣的小伙伴可以跟隨小編一起了解一下

Java工具包提供了強(qiáng)大的數(shù)據(jù)結(jié)構(gòu)。在Java中的數(shù)據(jù)結(jié)構(gòu)主要包括以下幾種接口和類(lèi):

  • 枚舉(Enumeration)
  • 位集合(BitSet)
  • 向量(Vector)
  • 棧(Stack)
  • 字典(Dictionary)
  • 哈希表(Hashtable)
  • 屬性(Properties)

以上這些類(lèi)是傳統(tǒng)遺留的,在Java2中引入了一種新的框架-集合框架(Collection)。

枚舉接口(Enumeration)

枚舉(Enumeration)接口雖然它本身不屬于數(shù)據(jù)結(jié)構(gòu),但它在其他數(shù)據(jù)結(jié)構(gòu)的范疇里應(yīng)用很廣。 枚舉(The Enumeration)接口定義了一種從數(shù)據(jù)結(jié)構(gòu)中取回連續(xù)元素的方式。例如,枚舉定義了一個(gè)叫nextElement 的方法,該方法用來(lái)得到一個(gè)包含多元素的數(shù)據(jù)結(jié)構(gòu)的下一個(gè)元素。

這種傳統(tǒng)接口已被 Iterator (迭代器)取代,雖然Enumeration 還未被遺棄,但在現(xiàn)代代碼中已經(jīng)被很少使用了。盡管如此,它還是使用在諸如Vector(向量)和Properties(屬性)這些傳統(tǒng)類(lèi)所定義的方法中,除此之外,還用在一些API類(lèi),并且在應(yīng)用程序中也廣泛被使用。 下表總結(jié)了一些Enumeration聲明的方法:

序號(hào)方法及說(shuō)明
1boolean hasMoreElements( ) ,測(cè)試此枚舉是否包含更多的元素
2Object nextElement( ) ,如果此枚舉對(duì)象至少還有一個(gè)可提供的元素,則返回此枚舉的下一個(gè)元素

位集合(BitSet)

位集合類(lèi)實(shí)現(xiàn)了一組可以單獨(dú)設(shè)置和清除的位或標(biāo)志。該類(lèi)在處理一組布爾值的時(shí)候非常有用,你只需要給每個(gè)值賦值一"位",然后對(duì)位進(jìn)行適當(dāng)?shù)脑O(shè)置或清除,就可以對(duì)布爾值進(jìn)行操作了。

一個(gè)Bitset類(lèi)創(chuàng)建一種特殊類(lèi)型的數(shù)組來(lái)保存位值。BitSet中數(shù)組大小會(huì)隨需要增加。這和位向量(vector of bits)比較類(lèi)似。這是一個(gè)傳統(tǒng)的類(lèi),但它在Java 2中被完全重新設(shè)計(jì)。

BitSet定義了兩個(gè)構(gòu)造方法

// 第一個(gè)構(gòu)造方法創(chuàng)建一個(gè)默認(rèn)的對(duì)象:
public BitSet()
// 第二個(gè)方法允許用戶(hù)指定初始大小。所有位初始化為0
public BitSet(int nbits)

BitSet中實(shí)現(xiàn)了Cloneable接口中定義的方法如下表所列:

序號(hào)方法及說(shuō)明
1void and(BitSet set) ,對(duì)此目標(biāo)位 set 和參數(shù)位 set 執(zhí)行邏輯與操作
2void andNot(BitSet set) ,清除此 BitSet 中所有的位,其相應(yīng)的位在指定的 BitSet 中已設(shè)置
3int cardinality( ) ,返回此 BitSet 中設(shè)置為 true 的位數(shù)
4void clear( ) ,將此 BitSet 中的所有位設(shè)置為 false
5void clear(int index) ,將索引指定處的位設(shè)置為 false
6void clear(int startIndex, int endIndex) ,將指定的 startIndex(包括)到指定的 toIndex(不包括)范圍內(nèi)的位設(shè)置為 false
7Object clone( ) ,復(fù)制此 BitSet,生成一個(gè)與之相等的新 BitSet
8boolean equals(Object bitSet) ,將此對(duì)象與指定的對(duì)象進(jìn)行比較
9void flip(int index) ,將指定索引處的位設(shè)置為其當(dāng)前值的補(bǔ)碼
10void flip(int startIndex, int endIndex) ,將指定的 fromIndex(包括)到指定的 toIndex(不包括)范圍內(nèi)的每個(gè)位設(shè)置為其當(dāng)前值的補(bǔ)碼
11boolean get(int index) ,返回指定索引處的位值
12BitSet get(int startIndex, int endIndex) ,返回一個(gè)新的 BitSet,它由此 BitSet 中從 fromIndex(包括)到 toIndex(不包括)范圍內(nèi)的位組成
13int hashCode( ) ,返回此位 set 的哈希碼值
14boolean intersects(BitSet bitSet) ,如果指定的 BitSet 中有設(shè)置為 true 的位,并且在此 BitSet 中也將其設(shè)置為 true,則返回 true
15boolean isEmpty( ) ,如果此 BitSet 中沒(méi)有包含任何設(shè)置為 true 的位,則返回 true
16int length( ) ,返回此 BitSet 的"邏輯大小":BitSet 中最高設(shè)置位的索引加 1
17int nextClearBit(int startIndex) ,返回第一個(gè)設(shè)置為 false 的位的索引,這發(fā)生在指定的起始索引或之后的索引上
18int nextSetBit(int startIndex),返回第一個(gè)設(shè)置為 true 的位的索引,這發(fā)生在指定的起始索引或之后的索引上
19void or(BitSet bitSet),對(duì)此位 set 和位 set 參數(shù)執(zhí)行邏輯或操作
20void set(int index),將指定索引處的位設(shè)置為 true
21void set(int index, boolean v),將指定索引處的位設(shè)置為指定的值
22void set(int startIndex, int endIndex),將指定的 fromIndex(包括)到指定的 toIndex(不包括)范圍內(nèi)的位設(shè)置為 true
23void set(int startIndex, int endIndex, boolean v),將指定的 fromIndex(包括)到指定的 toIndex(不包括)范圍內(nèi)的位設(shè)置為指定的值
24int size( ),返回此 BitSet 表示位值時(shí)實(shí)際使用空間的位數(shù)
25String toString( ),返回此位 set 的字符串表示形式
26void xor(BitSet bitSet),對(duì)此位 set 和位 set 參數(shù)執(zhí)行邏輯異或操作

實(shí)例:

public class Test {
    public static void main(String args[]) throws IOException {
        BitSet bits1 = new BitSet(16);
        BitSet bits2 = new BitSet(16);
        // 設(shè)置一些位
        for(int i=0; i<16; i++) {
            if((i%2) == 0) bits1.set(i);
            if((i%5) != 0) bits2.set(i);
        }
        System.out.println("位集合1初始模式: ");
        System.out.println(bits1);
        System.out.println("\n位集合2初始模式: ");
        System.out.println(bits2);
        // 對(duì)此目標(biāo)位 set 和參數(shù)位 set 執(zhí)行邏輯與操作
        bits2.and(bits1);
        System.out.println("\n位集合2 與 位集合1 執(zhí)行邏輯與操作 ");
        System.out.println(bits2);
        // 對(duì)此位 set 和位 set 參數(shù)執(zhí)行邏輯或操作
        bits2.or(bits1);
        System.out.println("\n位集合2 與 位集合1 執(zhí)行邏輯或操作: ");
        System.out.println(bits2);
        // 對(duì)此位 set 和位 set 參數(shù)執(zhí)行邏輯異或操作
        bits2.xor(bits1);
        System.out.println("\n位集合2 與 位集合1 執(zhí)行邏輯異或操作 ");
        System.out.println(bits2);
    }
}
// 程序編譯運(yùn)行結(jié)果如下:
// 位集合1初始模式: 
// {0, 2, 4, 6, 8, 10, 12, 14}
// 位集合2初始模式: 
// {1, 2, 3, 4, 6, 7, 8, 9, 11, 12, 13, 14}
// 位集合2 與 位集合1 執(zhí)行邏輯與操作 
// {2, 4, 6, 8, 12, 14}
// 位集合2 與 位集合1 執(zhí)行邏輯或操作: 
// {0, 2, 4, 6, 8, 10, 12, 14}
// 位集合2 與 位集合1 執(zhí)行邏輯異或操作 
// {}

向量(Vector)

向量(Vector)類(lèi)和傳統(tǒng)數(shù)組非常相似,但是Vector的大小能根據(jù)需要?jiǎng)討B(tài)的變化。和數(shù)組一樣,Vector對(duì)象的元素也能通過(guò)索引訪(fǎng)問(wèn)。使用Vector類(lèi)最主要的好處就是在創(chuàng)建對(duì)象的時(shí)候不必給對(duì)象指定大小,它的大小會(huì)根據(jù)需要?jiǎng)討B(tài)的變化。

Vector 與 ArrayList的區(qū)別

  • Vector 是同步訪(fǎng)問(wèn)的,所以線(xiàn)程就會(huì)安全,但是同時(shí)也會(huì)帶來(lái)弊端就是效率就會(huì)降低,但 Arraylist 恰恰相反,這也就導(dǎo)致Arraylist的效率比 Vector 高。
  • 在進(jìn)行擴(kuò)容時(shí),Vector 會(huì)增長(zhǎng)為原來(lái)數(shù)組長(zhǎng)的一倍,而 Arraylist 只會(huì)增長(zhǎng)為原來(lái)的一半,所以Arraylist節(jié)約內(nèi)存空間。
  • Vector 包含了許多傳統(tǒng)的方法,這些方法不屬于集合框架。

Vector 類(lèi)支持 4 種構(gòu)造方法

// 第一種構(gòu)造方法創(chuàng)建一個(gè)默認(rèn)的向量,默認(rèn)大小為 10
Vector()
// 第二種構(gòu)造方法創(chuàng)建指定大小的向量
Vector(int size)
// 第三種構(gòu)造方法創(chuàng)建指定大小的向量,并且增量用 incr 指定。增量表示向量每次增加的元素?cái)?shù)目
Vector(int size,int incr)
// 第四種構(gòu)造方法創(chuàng)建一個(gè)包含集合 c 元素的向量
Vector(Collection c)

除了從父類(lèi)繼承的方法外 Vector 還定義了以下方法:

序號(hào)方法及說(shuō)明
1void add(int index, Object element) ,在此向量的指定位置插入指定的元素
2boolean add(Object o) ,將指定元素添加到此向量的末尾
3boolean addAll(Collection c) ,將指定 Collection 中的所有元素添加到此向量的末尾,按照指定 collection 的迭代器所返回的順序添加這些元素
4boolean addAll(int index, Collection c) ,在指定位置將指定 Collection 中的所有元素插入到此向量中
5void addElement(Object obj) ,將指定的組件添加到此向量的末尾,將其大小增加 1
6int capacity() ,返回此向量的當(dāng)前容量
7void clear() ,從此向量中移除所有元素
8Object clone() ,返回向量的一個(gè)副本
9boolean contains(Object elem) ,如果此向量包含指定的元素,則返回 true
10boolean containsAll(Collection c) ,如果此向量包含指定 Collection 中的所有元素,則返回 true
11void copyInto(Object[] anArray) ,將此向量的組件復(fù)制到指定的數(shù)組中
12Object elementAt(int index) ,返回指定索引處的組件
13Enumeration elements() ,返回此向量的組件的枚舉
14void ensureCapacity(int minCapacity) ,增加此向量的容量(如有必要),以確保其至少能夠保存最小容量參數(shù)指定的組件數(shù)
15boolean equals(Object o) ,比較指定對(duì)象與此向量的相等性
16Object firstElement() ,返回此向量的第一個(gè)組件(位于索引 0) 處的項(xiàng))
17Object get(int index) ,返回向量中指定位置的元素
18int hashCode() ,返回此向量的哈希碼值
19int indexOf(Object elem) ,返回此向量中第一次出現(xiàn)的指定元素的索引,如果此向量不包含該元素,則返回 -1
20int indexOf(Object elem, int index) ,返回此向量中第一次出現(xiàn)的指定元素的索引,從 index 處正向搜索,如果未找到該元素,則返回 -1
21void insertElementAt(Object obj, int index) ,將指定對(duì)象作為此向量中的組件插入到指定的 index 處
22boolean isEmpty() ,測(cè)試此向量是否不包含組件
23Object lastElement() ,返回此向量的最后一個(gè)組件
24int lastIndexOf(Object elem) ,返回此向量中最后一次出現(xiàn)的指定元素的索引;如果此向量不包含該元素,則返回 -1
25int lastIndexOf(Object elem, int index) ,返回此向量中最后一次出現(xiàn)的指定元素的索引,從 index 處逆向搜索,如果未找到該元素,則返回 -1
26Object remove(int index) ,移除此向量中指定位置的元素
27boolean remove(Object o) ,移除此向量中指定元素的第一個(gè)匹配項(xiàng),如果向量不包含該元素,則元素保持不變
28boolean removeAll(Collection c) ,從此向量中移除包含在指定 Collection 中的所有元素
29void removeAllElements(),從此向量中移除全部組件,并將其大小設(shè)置為零
30boolean removeElement(Object obj) ,從此向量中移除變量的第一個(gè)(索引最小的)匹配項(xiàng)
31void removeElementAt(int index) ,刪除指定索引處的組件
32protected void removeRange(int fromIndex, int toIndex) ,從此向量中移除其索引位于 fromIndex(包括)與 toIndex(不包括)之間的所有元素
33boolean retainAll(Collection c) ,在此向量中僅保留包含在指定 Collection 中的元素
34Object set(int index, Object element) ,用指定的元素替換此向量中指定位置處的元素
35void setElementAt(Object obj, int index) ,將此向量指定 index 處的組件設(shè)置為指定的對(duì)象
36void setSize(int newSize) ,設(shè)置此向量的大小
37int size() ,返回此向量中的組件數(shù)
38List subList(int fromIndex, int toIndex) ,返回此 List 的部分視圖,元素范圍為從 fromIndex(包括)到 toIndex(不包括)
39Object[] toArray() ,返回一個(gè)數(shù)組,包含此向量中以恰當(dāng)順序存放的所有元素
40Object[] toArray(Object[] a) ,返回一個(gè)數(shù)組,包含此向量中以恰當(dāng)順序存放的所有元素;返回?cái)?shù)組的運(yùn)行時(shí)類(lèi)型為指定數(shù)組的類(lèi)型
41String toString() ,返回此向量的字符串表示形式,其中包含每個(gè)元素的 String 表示形式
42void trimToSize() ,對(duì)此向量的容量進(jìn)行微調(diào),使其等于向量的當(dāng)前大小

實(shí)例:

public class Test {
    public static void main(String args[]) throws IOException {
        // 初始大小為3,增量為2
        Vector v = new Vector(3, 2);
        System.out.println("初始大小: " + v.size());
        System.out.println("初始容量: " + v.capacity());
        v.addElement(new Integer(1));
        v.addElement(new Double(5.45));
        v.addElement(new Double(6.08));
        v.addElement(new Integer(7));
        System.out.println("四次添加后的容量: " + v.capacity());
        v.addElement(new Float(9.4));
        System.out.println("當(dāng)前容量: " + v.capacity());
        v.addElement(new Integer(10));
        System.out.println("當(dāng)前容量: " + v.capacity());
        System.out.println("第一元素: " + (Integer)v.firstElement());
        System.out.println("最后一個(gè)元素: " + (Integer)v.lastElement());
        v.addElement(new Integer(3));
        // 向量包含3
        if(v.contains(new Integer(3))) {
            System.out.println("向量包含 3");
        }
        // 列舉向量中的元素
        Enumeration vEnum = v.elements();
        System.out.println("\n向量中的元素:");
        while(vEnum.hasMoreElements()) {
            System.out.print(vEnum.nextElement() + " ");
        }
        System.out.println();
    }
}
// 程序編譯運(yùn)行結(jié)果如下:
// 初始大小: 0
// 初始容量: 3
// 四次添加后的容量: 5
// 當(dāng)前容量: 5
// 當(dāng)前容量: 7
// 第一元素: 1
// 最后一個(gè)元素: 10
// 向量包含 3
// 向量中的元素:
// 1 5.45 6.08 7 9.4 10 3 

棧(Stack)

棧(Stack)實(shí)現(xiàn)了一個(gè)后進(jìn)先出(LIFO)的數(shù)據(jù)結(jié)構(gòu)。你可以把棧理解為對(duì)象的垂直分布的棧,當(dāng)你添加一個(gè)新元素時(shí),就將新元素放在其他元素的頂部。當(dāng)你從棧中取元素的時(shí)候,就從棧頂取一個(gè)元素。換句話(huà)說(shuō),最后進(jìn)棧的元素最先被取出。

棧是Vector的一個(gè)子類(lèi),棧只定義了默認(rèn)構(gòu)造函數(shù),用來(lái)創(chuàng)建一個(gè)空棧。棧除了包括由Vector定義的所有方法,也定義了自己的一些方法:

序號(hào)方法及說(shuō)明
1boolean empty() ,測(cè)試棧是否為空
2Object peek( ) ,查看棧頂部的對(duì)象,但不從棧中移除它
3Object pop( ) ,移除棧頂部的對(duì)象,并作為此函數(shù)的值返回該對(duì)象
4Object push(Object element) ,把項(xiàng)壓入堆棧頂部
5int search(Object element) ,返回對(duì)象在堆棧中的位置,以 1 為基數(shù)

字典(Dictionary)

字典(Dictionary) 類(lèi)是一個(gè)抽象類(lèi),它定義了鍵映射到值的數(shù)據(jù)結(jié)構(gòu)。當(dāng)你想要通過(guò)特定的鍵而不是整數(shù)索引來(lái)訪(fǎng)問(wèn)數(shù)據(jù)的時(shí)候,這時(shí)候應(yīng)該使用Dictionary。由于Dictionary類(lèi)是抽象類(lèi),所以它只提供了鍵映射到值的數(shù)據(jù)結(jié)構(gòu),而沒(méi)有提供特定的實(shí)現(xiàn)。

Dictionary類(lèi)已經(jīng)過(guò)時(shí)了。在實(shí)際開(kāi)發(fā)中,你可以實(shí)現(xiàn) Map 接口來(lái)獲取鍵/值的存儲(chǔ)功能。

哈希表(Hashtable)

Hashtable類(lèi)提供了一種在用戶(hù)定義鍵結(jié)構(gòu)的基礎(chǔ)上來(lái)組織數(shù)據(jù)的手段。例如,在地址列表的哈希表中,你可以根據(jù)郵政編碼作為鍵來(lái)存儲(chǔ)和排序數(shù)據(jù),而不是通過(guò)人名。哈希表鍵的具體含義完全取決于哈希表的使用情景和它包含的數(shù)據(jù)。

Hashtable是原始的java.util的一部分, 是一個(gè)Dictionary具體的實(shí)現(xiàn) 。然而,Java 2 重構(gòu)的Hashtable實(shí)現(xiàn)了 Map 接口,因此,Hashtable 現(xiàn)在集成到了集合框架中。它和HashMap類(lèi)很相似,但是它支持同步

像HashMap一樣,Hashtable在哈希表中存儲(chǔ)鍵/值對(duì)。當(dāng)使用一個(gè)哈希表,要指定用作鍵的對(duì)象,以及要鏈接到該鍵的值。然后,該鍵經(jīng)過(guò)哈希處理,所得到的散列碼被用作存儲(chǔ)在該表中值的索引。

Hashtable定義了四個(gè)構(gòu)造方法

// 默認(rèn)構(gòu)造方法
public Hashtable()
// 創(chuàng)建指定大小的哈希表
public Hashtable(int initialCapacity)
// 創(chuàng)建了一個(gè)指定大小的哈希表,并且通過(guò)fillRatio指定填充比例
// 填充比例必須介于0.0和1.0之間,它決定了哈希表在重新調(diào)整大小之前的充滿(mǎn)程度
public Hashtable(int initialCapacity, float loadFactor)
// 創(chuàng)建了一個(gè)以 t 中元素為初始化元素的哈希表,哈希表的容量被設(shè)置為 t 的兩倍
public Hashtable(Map<? extends K, ? extends V> t) 

Hashtable中除了從Map接口中定義的方法外,還定義了以下方法:

序號(hào)方法及說(shuō)明
1void clear( ) ,將此哈希表清空,使其不包含任何鍵
2Object clone( ) ,創(chuàng)建此哈希表的淺表副本
3boolean contains(Object value) ,測(cè)試此映射表中是否存在與指定值關(guān)聯(lián)的鍵
4boolean containsKey(Object key) ,測(cè)試指定對(duì)象是否為此哈希表中的鍵
5boolean containsValue(Object value) ,如果此 Hashtable 將一個(gè)或多個(gè)鍵映射到此值,則返回 true
6Enumeration elements( ) ,返回此哈希表中的值的枚舉
7Object get(Object key) ,返回指定鍵所映射到的值,如果此映射不包含此鍵的映射,則返回 null. 更確切地講,如果此映射包含滿(mǎn)足 (key.equals(k)) 的從鍵 k 到值 v 的映射,則此方法返回 v;否則,返回 null
8boolean isEmpty( ) ,測(cè)試此哈希表是否沒(méi)有鍵映射到值
9Enumeration keys( ) ,返回此哈希表中的鍵的枚舉
10Object put(Object key, Object value) ,將指定 key 映射到此哈希表中的指定 value
11void rehash( ) ,增加此哈希表的容量并在內(nèi)部對(duì)其進(jìn)行重組,以便更有效地容納和訪(fǎng)問(wèn)其元素
12Object remove(Object key) ,從哈希表中移除該鍵及其相應(yīng)的值
13int size( ) ,返回此哈希表中的鍵的數(shù)量
14String toString( ) ,返回此 Hashtable 對(duì)象的字符串表示形式,其形式為 ASCII 字符 ", " (逗號(hào)加空格)分隔開(kāi)的、括在括號(hào)中的一組條目

屬性(Properties)

Properties 繼承于 Hashtable。Properties 類(lèi)表示了一個(gè)持久的屬性集。屬性列表中每個(gè)鍵及其對(duì)應(yīng)值都是一個(gè)字符串。Properties 類(lèi)被許多Java類(lèi)使用。例如,在獲取環(huán)境變量時(shí)它就作為System.getProperties()方法的返回值。

Properties 定義如下實(shí)例變量.這個(gè)變量持有一個(gè) Properties 對(duì)象相關(guān)的默認(rèn)屬性列表:

protected Properties defaults;

Properties類(lèi)定義了兩個(gè)構(gòu)造方法

// 第一個(gè)構(gòu)造方法沒(méi)有默認(rèn)值
public Properties()
// 第二個(gè)構(gòu)造方法使用propDefault 作為默認(rèn)值
public Properties(Properties defaults)

除了從 Hashtable 中所定義的方法,Properties 還定義了以下方法:

序號(hào)方法及說(shuō)明
1String getProperty(String key), 用指定的鍵在此屬性列表中搜索屬性
2String getProperty(String key, String defaultProperty),用指定的鍵在屬性列表中搜索屬性
3void list(PrintStream streamOut),將屬性列表輸出到指定的輸出流
4void list(PrintWriter streamOut),將屬性列表輸出到指定的輸出流
5void load(InputStream streamIn) throws IOException,從輸入流中讀取屬性列表(鍵和元素對(duì))
6Enumeration propertyNames( ),按簡(jiǎn)單的面向行的格式從輸入字符流中讀取屬性列表(鍵和元素對(duì))
7Object setProperty(String key, String value),調(diào)用 Hashtable 的方法 put
8void store(OutputStream streamOut, String description),以適合使用 load(InputStream)方法加載到 Properties 表中的格式,將此 Properties 表中的屬性列表(鍵和元素對(duì))寫(xiě)入輸出流

以上就是一文帶你深入了解Java的數(shù)據(jù)結(jié)構(gòu)的詳細(xì)內(nèi)容,更多關(guān)于Java數(shù)據(jù)結(jié)構(gòu)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論

达孜县| 成安县| 盈江县| 镇沅| 沁源县| 周口市| 松滋市| 南澳县| 南宁市| 龙南县| 汝州市| 通河县| 葵青区| 开原市| 景东| 连平县| 崇义县| 辽中县| 麟游县| 清新县| 凌源市| 万源市| 浦城县| 阳泉市| 北流市| 双城市| 罗田县| 平罗县| 土默特左旗| 岚皋县| 安溪县| 九寨沟县| 白山市| 白玉县| 莫力| 崇礼县| 铁岭县| 建昌县| 黎城县| 徐州市| 乌兰浩特市|