object Demo {
@JvmStatic
fun main(args: Array<String>) {
when (ProType.type) {
ProType.LINK -> {
val type = 8
val linkedList = LinkedList<Int>()
linkedList.add(688)
linkedList.add(6)
linkedList.add(8)
linkedList.add(8)
linkedList.add(9)
//查第一个元素用
val find = linkedList.find {
when (type) {
8 -> true
else -> true
}
}
println("find:$find")
//更改
linkedList[0] = 888
println("$linkedList")
//新增
linkedList.addLast(90)
println("$linkedList")
//删除
linkedList.remove(90)
println("$linkedList")
}
ProType.TREE -> {
val treeSet = TreeSet<Int>()
treeSet.add(6)
treeSet.add(88)
treeSet.add(66)
treeSet.add(69)
treeSet.add(99)
println("$treeSet")
}
ProType.MAP -> {
val hashMap = hashMapOf<Int, String>()
hashMap[1] = "老李"
hashMap[2] = "老何"
hashMap[3] = "老端"
println("${hashMap[1]}")
val iterator = hashMap.keys.iterator()
while (iterator.hasNext()) {
val key = iterator.next()
println("iterator${hashMap[key]}")
}
val hashSet = hashSetOf<User>()
val user = User(6, "laoli", 18)
val user1 = User(8, "li", 20)
hashSet.add(user)
hashSet.add(user1)
println("$hashSet")
hashSet.remove(user1)
println("$hashSet")
}
ProType.THREAD -> {
val tw = TicketWindow();
val t1 = Thread(tw, "一号窗口")
val t2 = Thread(tw, "二号窗口")
val t3 = Thread(tw, "三号窗口")
t1.start()
t2.start()
t3.start()
}
ProType.STREAM -> {
val strings = mutableListOf<String>("abc", "", "bc", "efg", "abcd", "", "jkl")
val filtered = strings.stream()
.filter { string: String -> string.isNotEmpty() }
.collect(Collectors.toList())
println("$filtered")
val random = Random()
random.ints().limit(2).forEach { println(it) }
val numbers = listOf(3, 2, 2, 3, 7, 3, 5)
val squaresList = numbers.stream().map { it * it }.distinct()
.sorted().collect(Collectors.toList())
println("$squaresList")
val strings1 =
listOf("abc", "", "bc", "efg", "abcd", "", "jkl")
val count = strings1.stream()
.filter { it.isEmpty() }
.count()
println("$count")
val strings2 = listOf("abc", "", "bc", "efg", "", "", "jkl")
//stream单线程,parallelstream多线程。.collect(Collectors.toList())是线程安全的
val count2 = strings2.parallelStream()
.filter {
println("filter${Thread.currentThread().name}")
it.isEmpty()
}
.count()
println("$count2")
}
}
}
}
class TicketWindow : Runnable {
private var tickets = 1000
override fun run() {
while (true) {
synchronized(TicketWindow::class.java) {
if (tickets > 0) {
println("${Thread.currentThread().name}还剩余票:" + tickets + "张")
tickets--
println(Thread.currentThread().name + "卖出一张火车票,还剩" + tickets + "张")
Thread.sleep(1)
} else {
println("${Thread.currentThread().name}余票不足,暂停出售!")
// wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用
Thread.sleep(1000 * 60 * 5.toLong())
}
}
}
}
}