集合

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?1.集合概述及繼承體系圖

A:集合的由來

數(shù)組長度是固定,當添加的元素超過了數(shù)組的長度時需要對數(shù)組重新定義,太麻煩,java內部給我們提供了集合類,能存儲任意對象,長度是可以改變的,隨著元素的增加而增加,隨著元素的減少而減少

B:數(shù)組和集合的區(qū)別

區(qū)別1 :

數(shù)組既可以存儲基本數(shù)據(jù)類型,又可以存儲引用數(shù)據(jù)類型,基本數(shù)據(jù)類型存儲的是值,引用數(shù)據(jù)類型存儲的是地址值

集合只能存儲引用數(shù)據(jù)類型(對象)集合中也可以存儲基本數(shù)據(jù)類型,但是在存儲的時候會自動裝箱變成對象

區(qū)別2:

數(shù)組長度是固定的,不能自動增長

集合的長度的是可變的,可以根據(jù)元素的增加而增長

C:數(shù)組和集合什么時候用 * 1,如果元素個數(shù)是固定的推薦用數(shù)組 * 2,如果元素個數(shù)不是固定的推薦用集合

D:集合繼承體系圖


? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2.Collection集合的基本功能測試

?A:案例演示

基本功能演示

boolean add(E e)

boolean remove(Object o)

void clear()

boolean contains(Object o)

boolean isEmpty()

int size()

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?3.集合的遍歷之集合轉數(shù)組遍歷

A:集合的遍歷

其實就是依次獲取集合中的每一個元素辟拷。

B:案例演示

把集合轉成數(shù)組啃洋,可以實現(xiàn)集合的遍歷

toArray()

```java Collection coll = new ArrayList(); coll.add(new Student("張三",23)); //Object obj = new Student("張三",23); coll.add(new Student("李四",24)); coll.add(new Student("王五",25)); coll.add(new Student("趙六",26));

Object[] arr = coll.toArray(); //將集合轉換成數(shù)組 for (int i = 0; i < arr.length; i++) { Student s = (Student)arr[i]; //強轉成Student System.out.println(s.getName() + "," + s.getAge()); } ```

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 4.Collection集合的帶All功能測試

A:案例演示

帶All的功能演示

java boolean addAll(Collection c) boolean removeAll(Collection c) boolean containsAll(Collection c) boolean retainAll(Collection c)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 5.集合的遍歷之迭代器遍歷

A:迭代器概述

集合是用來存儲元素,存儲的元素需要查看,那么就需要迭代(遍歷)

B:案例演示

迭代器的使用

```java

Collection c = new ArrayList(); c.add("a"); c.add("b"); c.add("c"); c.add("d"); Iterator it = c.iterator(); //獲取迭代器的引用 while(it.hasNext()) { //集合中的迭代方法(遍歷) System.out.println(it.next()); } ```


? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?6.Collection存儲自定義對象并遍歷

A:案例演示

Collection存儲自定義對象并用迭代器遍歷

Collection c = new ArrayList();

```java c.add(new Student("張三",23)); c.add(new Student("李四",24)); c.add(new Student("王五",25)); c.add(new Student("趙六",26)); c.add(new Student("趙六",26));

for(Iterator it = c.iterator();it.hasNext();) { Student s = (Student)it.next(); //向下轉型 System.out.println(s.getName() + "," + s.getAge()); //獲取對象中的姓名和年齡 } System.out.println("------------------------------"); Iterator it = c.iterator(); //獲取迭代器 while(it.hasNext()) { //判斷集合中是否有元素 Student s = (Student)it.next(); //向下轉型 System.out.println(s.getName() + "," + s.getAge()); //獲取對象中的姓名和年齡 } ```

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 7.迭代器的原理及源碼解析

A:迭代器原理

迭代器原理:迭代器是對集合進行遍歷,而每一個集合內部的存儲結構都是不同的,所以每一個集合存和取都是不一樣,那么就需要在每一個類中定義hasNext()和next()方法,這樣做是可以的,但是會讓整個集合體系過于臃腫,迭代器是將這樣的方法向上抽取出接口,然后在每個類的內部,定義自己迭代方式,這樣做的好處有二,第一規(guī)定了整個集合體系的遍歷方式都是hasNext()和next()方法,第二,代碼有底層內部實現(xiàn),使用者不用管怎么實現(xiàn)的,會用即可

B:迭代器源碼解析

1,在eclipse中ctrl + shift + t找到ArrayList類

2,ctrl+o查找iterator()方法

3,查看返回值類型是new Itr(),說明Itr這個類實現(xiàn)Iterator接口

4,查找Itr這個內部類,發(fā)現(xiàn)重寫了Iterator中的所有抽象方法

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?9.List集合的特有功能概述和測試

A:List集合的特有功能概述

void add(int index,E element)

E remove(int index)

E get(int index)

E set(int index,E element)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 10.List集合存儲學生對象并遍歷

A:案例演示

通過size()和get()方法結合使用遍歷宅粥。

```java

List list = new ArrayList(); list.add(new Student("張三", 18)); list.add(new Student("李四", 18)); list.add(new Student("王五", 18)); list.add(new Student("趙六", 18));

for(int i = 0; i < list.size(); i++) { Student s = (Student)list.get(i); System.out.println(s.getName() + "," + s.getAge()); } ```

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 11.并發(fā)修改異常產生的原因及解決方案

A:案例演示

需求:我有一個集合坡脐,請問,我想判斷里面有沒有"world"這個元素悠垛,如果有朝抖,我就添加一個"javaee"元素崭庸,請寫代碼實現(xiàn)。

```java

List list = new ArrayList(); list.add("a"); list.add("b"); list.add("world"); list.add("d"); list.add("e");

/Iterator it = list.iterator(); while(it.hasNext()) { String str = (String)it.next(); if(str.equals("world")) { list.add("javaee"); //這里會拋出ConcurrentModificationException并發(fā)修改異常 } }/ ```

B:ConcurrentModificationException出現(xiàn)

迭代器遍歷扬蕊,集合修改集合

C:解決方案

a:迭代器迭代元素搀别,迭代器修改元素(ListIterator的特有功能add)

b:集合遍歷元素,集合修改元素

? ? ```java

ListIterator lit = list.listIterator();? ? //如果想在遍歷的過程中添加元素,可以用ListIterator中的add方法

? ? while(lit.hasNext()) {

? ? ? ? String str = (String)lit.next();

? ? ? ? if(str.equals("world")) {

? ? ? ? ? ? lit.add("javaee");?

? ? ? ? ? ? //list.add("javaee");

? ? ? ? }

? ? }

```

?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 12.ListIterator

boolean hasNext()是否有下一個

boolean hasPrevious()是否有前一個

Object next()返回下一個元素

Object previous();返回上一個元素

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 13. Vector的特有功能

A:Vector類概述

B:Vector類特有功能

public void addElement(E obj)

public E elementAt(int index)

public Enumeration elements()

C:案例演示

Vector的迭代

```java

Vector v = new Vector(); //創(chuàng)建集合對象,List的子類 v.addElement("a"); v.addElement("b"); v.addElement("c"); v.addElement("d");

//Vector迭代 Enumeration en = v.elements(); //獲取枚舉 while(en.hasMoreElements()) { //判斷集合中是否有元素 System.out.println(en.nextElement());//獲取集合中的元素 } ```

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 14.數(shù)據(jù)結構之數(shù)組和鏈表

A:數(shù)組

查詢快修改也快

增刪慢

B:鏈表

查詢慢,修改也慢

增刪快

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?15.List的三個子類的特點

A:List的三個子類的特點

ArrayList: 底層數(shù)據(jù)結構是數(shù)組尾抑,查詢快歇父,增刪慢。 線程不安全再愈,效率高庶骄。 Vector: 底層數(shù)據(jù)結構是數(shù)組,查詢快践磅,增刪慢。 線程安全灸异,效率低府适。 Vector相對ArrayList查詢慢(線程安全的) Vector相對LinkedList增刪慢(數(shù)組結構) LinkedList: 底層數(shù)據(jù)結構是鏈表,查詢慢肺樟,增刪快檐春。 線程不安全,效率高么伯。

powershell Vector 和 ArrayList 的區(qū)別 Vector 是線程安全的,效率低 ArrayList 是線程不安全的,效率高 共同點:都是數(shù)組實現(xiàn)的 ArrayList 和 LinkedList 的區(qū)別 ArrayList 底層是數(shù)組結果,查詢和修改快 LinkedList 底層是鏈表結構的,增和刪比較快,查詢和修改比較慢 共同點:都是線程不安全的* B:List有三個兒子疟暖,我們到底使用誰呢? 查詢多用ArrayList 增刪多用LinkedList 如果都多ArrayList(一般都會經常使用ArrayList)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?1.HashSet存儲字符串并遍歷)

A:Set集合概述及特點

通過API查看即可

B:案例演示

HashSet存儲字符串并遍歷

```java Set?set = new HashSet<>();

set.add("lisi"); set.add("lisi"); set.add("wangwu"); set.add("wangw1u"); set.add("wang2w1u");

for (String string : set) { System.out.println(string); } ``` 將集合中的重復元素去掉

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2.HashSet存儲自定義對象

A:案例演示

存儲自定義對象,并保證元素唯一性田柔。

重寫hashCode()和equals()方法

```java Set?set = new HashSet<>(); Teacher t1 = new Teacher("lisi",13); Teacher t2 = new Teacher("lisi",13) Teacher t3 = new Teacher("lisi"13); /* * 先判斷hashcode * hashcode不一致那么就不是同一個對象 * hashcode一致 * 那么久再去調用equals * true 對象一樣 * false 不一樣 */ set.add(t1); set.add(t2); set.add(t3);

for (Teacher teacher : set) { System.out.println(teacher); } ```

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?4.HashSet如何保證元素唯一性的原理

1.HashSet原理

我們使用Set集合都是需要去掉重復元素的, 如果在存儲的時候逐個equals()比較, 效率較低,哈希算法提高了去重復的效率, 降低了使用equals()方法的次數(shù)

當HashSet調用add()方法存儲對象的時候, 先調用對象的hashCode()方法得到一個哈希值, 然后在集合中查找是否有哈希值相同的對象

如果沒有哈希值相同的對象就直接存入集合

如果有哈希值相同的對象, 就和哈希值相同的對象逐個進行equals()比較,比較結果為false就存入, true則不存

2.將自定義類的對象存入HashSet去重復

類中必須重寫hashCode()和equals()方法

hashCode(): 屬性相同的對象返回值必須相同, 屬性不同的返回值盡量不同(提高效率)

equals(): 屬性相同返回true, 屬性不同返回false,返回false的時候存儲

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 5.LinkedHashSet的概述和使用

A:LinkedHashSet的特點

B:案例演示

LinkedHashSet的特點

可以保證怎么存就怎么取

```java package corejava_day17.set;

import java.util.Iterator; import java.util.LinkedHashSet;

public class LinkedListed { public static void main(String[] args) { LinkedHashSet?set = new LinkedHashSet(); set.add("lisi"); set.add("lisi2555"); set.add("lisi3"); set.add("lisi1"); set.add("lis64i");

? ? Iterator<String> iterator = set.iterator();

? ? while(iterator.hasNext()) {

? ? ? ? System.out.println(iterator.next());

? ? }

}

}

```

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?6.產生10個1-20之間的隨機數(shù)要求隨機數(shù)不能重復

A:案例演示

需求:編寫一個程序俐巴,獲取10個1至20的隨機數(shù),要求隨機數(shù)不能重復硬爆。并把最終的隨機數(shù)輸出到控制臺欣舵。

```java package corejava_day17.set;

import java.util.HashSet; import java.util.Random; import java.util.Set;

public class LinkedListed { public static void main(String[] args) { Random random = new Random(); Set?set = new HashSet<>(); while(set.size() < 20) { int number = random.nextInt(20) + 1; set.add(number); }

? ? for (Integer integer : set) {

? ? ? ? System.out.println(integer);

? ? }

}

}

```

7.練習

使用Scanner從鍵盤讀取一行輸入,去掉其中重復字符, 打印出不同的那些


? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 8.TreeSet存儲Integer類型的元素并遍歷

A:案例演示

TreeSet存儲Integer類型的元素并遍歷


? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 9.TreeSet存儲自定義對象

A:案例演示

存儲Person對象

10.TreeSet保證元素唯一和自然排序的原理和圖解

A:畫圖演示

TreeSet保證元素唯一和自然排序的原理和圖解

```powershell 二叉樹: 小的存儲在左邊,大的存儲在右邊 負數(shù)在左邊 后一個比前一個小 正數(shù)在右邊 后一個比前一個大 0代表集合中只有這樣一個元素 每次先去根元素比較

按照年紀排序缀磕,年紀相同按照名字排序 ```

11.TreeSet存儲自定義對象并遍歷練習

A:案例演示


TreeSet存儲自定義對象并遍歷練習1(按照姓名排序)

12.TreeSet存儲自定義對象并遍歷練習2

A:案例演示

TreeSet存儲自定義對象并遍歷練習2(按照姓名的長度排序)

13.TreeSet保證元素唯一和比較器排序的原理及代碼實現(xiàn)

A:案例演示

TreeSet保證元素唯一和比較器排序的原理及代碼實現(xiàn)

```java // 按照字符串長度排序 package corejava_day17.set;

import java.util.Comparator; import java.util.TreeSet;

class Com implements Comparator?{

// o2 代表集合中已經有的

// o1 新添加的

// 每次首先都會與根元素比計較

? //負數(shù)在左邊 后一個比前一個小

//正數(shù)在右邊 后一個比前一個大

//0代表集合中只有這樣一個元素

@Override

public int compare(String o1, String o2) {

? ? int num = o1.length() - o2.length();

? ? return num == 0 ? o1.compareTo(o2) : num;

}

}

public class LinkedListed { public static void main(String[] args) { TreeSet?set = new TreeSet<>(new Com());

? ? set.add("ddddddddd");

? ? set.add("dd");

? ? System.out.println(set.toString());

}

}

```

14.TreeSet原理

1.特點

TreeSet是用來排序的, 可以指定一個順序, 對象存入之后會按照指定的順序排列

2.使用方式

a.自然順序(Comparable)

TreeSet類的add()方法中會把存入的對象提升為Comparable類型

調用對象的compareTo()方法和集合中的對象比較

根據(jù)compareTo()方法返回的結果進行存儲

b.比較器順序(Comparator)

創(chuàng)建TreeSet的時候可以制定 一個Comparator

如果傳入了Comparator的子類對象, 那么TreeSet就會按照比較器中的順序排序

add()方法內部會自動調用Comparator接口中compare()方法排序

調用的對象是compare方法的第一個參數(shù),集合中的對象是compare方法的第二個參數(shù)

c.兩種方式的區(qū)別

TreeSet構造函數(shù)什么都不傳, 默認按照類中Comparable的順序(沒有就報錯ClassCastException)

TreeSet如果傳入Comparator, 就優(yōu)先按照Comparator

1.練習

在一個集合中存儲了無序并且重復的字符串,定義一個方法,讓其有序(字典順序),而且還不能去除重復

```java package com.briup.test;

import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.TreeSet;

public class Test4 {

public static void main(String[] args) {

? ? ArrayList<String> list = new ArrayList<>();

? ? list.add("aaa");

? ? list.add("aaa");

? ? list.add("ccc");

? ? list.add("ddd");

? ? list.add("fffffffffff");

? ? list.add("briup");

? ? list.add("bbbb");

? ? list.add("aaa");

? ? list.add("aaa");

? ? sort(list);

? ? System.out.println(list);

}

public static void sort(List<String> list) {

? ? TreeSet<String> ts = new TreeSet<>(new Comparator<String>() {

? ? ? ? @Override

? ? ? ? public int compare(String s1, String s2) {

? ? ? ? ? ? int num = s1.compareTo(s2);? ? ? ? ? ? ? ? //比較內容為主要條件

? ? ? ? ? ? return num == 0 ? 1 : num;? ? ? ? ? ? ? ? ? //保留重復

? ? ? ? }

? ? });


? ? //2,將list集合中所有的元素添加到TrreSet集合中,對其排序,保留重復

? ? ts.addAll(list);

? ? //3,清空list集合

? ? list.clear();

? ? //4,將TreeSet集合中排好序的元素添加到list中

? ? list.addAll(ts);

}

}

```

從鍵盤接收一個字符串, 程序對其中所有字符進行排序,例如鍵盤輸入: helloitcast程序打印:acehillostt(保留重復)

```java package com.briup.test;

import java.util.Comparator; import java.util.Scanner; import java.util.TreeSet;

public class Test5 {

public static void main(String[] args) {

? ? Scanner sc = new Scanner(System.in);

? ? System.out.println("請輸入一個字符串");

? ? String line = sc.nextLine();

? ? char[] arr = line.toCharArray();

? ? TreeSet<Character> ts = new TreeSet<>(new Comparator<Character>() {

? ? ? ? @Override

? ? ? ? public int compare(Character c1, Character c2) {

? ? ? ? ? ? int num = c1.compareTo(c2);

? ? ? ? ? ? return num == 0 ? 1 : num;

? ? ? ? }

? ? });

? ? for(char c : arr) {

? ? ? ? ts.add(c);? ? ? ? ? ? ? ? ? ? ? ? ?

? ? }

? ? for(Character c : ts) {

? ? ? ? System.out.print(c);

? ? }

}

}

```

程序啟動后, 可以從鍵盤輸入接收多個整數(shù), 直到輸入quit時結束輸入. 把所有輸入的整數(shù)倒序排列打印.(保留重復的)

```java package com.briup.test;

import java.util.Comparator; import java.util.Scanner; import java.util.TreeSet;

public class Test6 {

public static void main(String[] args) {

? ? Scanner sc = new Scanner(System.in);

? ? TreeSet<Integer> ts = new TreeSet<>(new Comparator<Integer>() {

? ? ? ? @Override

? ? ? ? public int compare(Integer i1, Integer i2) {

? ? ? ? ? ? int num = i2.compareTo(i1);

? ? ? ? ? ? return num == 0 ? 1 : num;

? ? ? ? }

? ? });

? ? while(true) {

? ? ? ? String line = sc.nextLine();? ? ? ? ? ? ? ?

? ? ? ? if("quit".equals(line)) {

? ? ? ? ? ? break;

? ? ? ? }

? ? ? ? Integer i = Integer.parseInt(line);

? ? ? ? ts.add(i);

? ? }

? ? for (Integer integer : ts) {

? ? ? ? System.out.println(integer);

? ? }

}

}

```

?

鍵盤錄入5個學生信息(姓名,語文成績,數(shù)學成績,英語成績),按照總分從高到低輸出到控制臺缘圈。(分數(shù)相同按照名字排序)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市袜蚕,隨后出現(xiàn)的幾起案子糟把,更是在濱河造成了極大的恐慌,老刑警劉巖牲剃,帶你破解...
    沈念sama閱讀 219,589評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件遣疯,死亡現(xiàn)場離奇詭異,居然都是意外死亡颠黎,警方通過查閱死者的電腦和手機另锋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評論 3 396
  • 文/潘曉璐 我一進店門滞项,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人夭坪,你說我怎么就攤上這事文判。” “怎么了室梅?”我有些...
    開封第一講書人閱讀 165,933評論 0 356
  • 文/不壞的土叔 我叫張陵戏仓,是天一觀的道長。 經常有香客問我亡鼠,道長赏殃,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,976評論 1 295
  • 正文 為了忘掉前任间涵,我火速辦了婚禮仁热,結果婚禮上,老公的妹妹穿的比我還像新娘勾哩。我一直安慰自己抗蠢,他們只是感情好,可當我...
    茶點故事閱讀 67,999評論 6 393
  • 文/花漫 我一把揭開白布思劳。 她就那樣靜靜地躺著迅矛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪潜叛。 梳的紋絲不亂的頭發(fā)上秽褒,一...
    開封第一講書人閱讀 51,775評論 1 307
  • 那天,我揣著相機與錄音威兜,去河邊找鬼销斟。 笑死,一個胖子當著我的面吹牛椒舵,可吹牛的內容都是我干的票堵。 我是一名探鬼主播,決...
    沈念sama閱讀 40,474評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼逮栅,長吁一口氣:“原來是場噩夢啊……” “哼悴势!你這毒婦竟也來了?” 一聲冷哼從身側響起措伐,我...
    開封第一講書人閱讀 39,359評論 0 276
  • 序言:老撾萬榮一對情侶失蹤特纤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后侥加,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體捧存,經...
    沈念sama閱讀 45,854評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,007評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了昔穴。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片镰官。...
    茶點故事閱讀 40,146評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖吗货,靈堂內的尸體忽然破棺而出泳唠,到底是詐尸還是另有隱情,我是刑警寧澤宙搬,帶...
    沈念sama閱讀 35,826評論 5 346
  • 正文 年R本政府宣布笨腥,位于F島的核電站,受9級特大地震影響勇垛,放射性物質發(fā)生泄漏脖母。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,484評論 3 331
  • 文/蒙蒙 一闲孤、第九天 我趴在偏房一處隱蔽的房頂上張望谆级。 院中可真熱鬧,春花似錦讼积、人聲如沸哨苛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至玻侥,卻和暖如春决摧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背凑兰。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評論 1 272
  • 我被黑心中介騙來泰國打工掌桩, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人姑食。 一個月前我還...
    沈念sama閱讀 48,420評論 3 373
  • 正文 我出身青樓波岛,卻偏偏與公主長得像,于是被迫代替她去往敵國和親音半。 傳聞我的和親對象是個殘疾皇子则拷,可洞房花燭夜當晚...
    茶點故事閱讀 45,107評論 2 356