作者:老屋时光_503 | 来源:互联网 | 2023-05-16 21:26
1.我再看HashMap和Hashtable总结的时候,上面说HashMap的特点是异步而Hashtable的特点是同步啥意思?2.还有ArrayList特点是异步和Vector的特点是同步,到底
1.我再看HashMap和Hashtable总结的时候,上面说HashMap的特点是异步而Hashtable的特点是同步啥意思?
2.还有ArrayList特点是异步和Vector的特点是同步,到底啥意思?
兄弟分不多了,呵呵.
17 个解决方案
主要在多线程时有区别。
多线程时实现了同步的也就是实现了synchronized方法。
可以在操作时防止被其它线程抢占而产生数据错误。
在其它方面没有什么区别。
不用多线程编程时尽量不用同步的。
集合和数组的区别?
集合当中可以存放什么数据?
那么能不能用Object[]代替集合?
Collection接口的实现类所通用的方法
a> add() 向集合内添加元素
b> size() 获得元素个数
c> iterator() 获得迭代器
(*) get(int index) 方法只能用于有序集合!
1 ArrayList Vector LinkedList
以上三种集合是List接口的实现类 所以他们拥有List的特征
有序(添加的顺序)!不唯一!
他们三者的用法很相似 但是要根据不同的需求灵活的选择正确的集合
ArrayList /TreeSet/HashMap/LinkList非线程安全 Vector/HashSet/Hashtable 线程安全
ArrayList 数组实现 LinkedList 双向循环链表
2 HashSet
HashSet是Set接口的实现类 Set集合特征是无序切唯一
取出集合中元素的时候 没有任何规律可循
HashSet如何保证自己唯一的?
equals(Object obj) hashCode() -> 指定比较规则!
3 TreeSet
TreeSet是SortedSet接口的实现类 SortedSet特征:有序 唯一
它的底层实现采用树状数据结构 在新元素添加进集合的时候,就对他的位置进行了比较排序 从而时刻保证集合当中元素有序!
TreeSet又是如何保证自己唯一的?
Comparable compareTo(Object obj)
or
Comparator compare(Object o1,Object o2)
在比较的方法当中 不但确定了排序规则 还进一步排除了重复元素
因为java本身是支持多线程的,运行程序的同时会有同时多个线程进行请求.
对于共享(静态的)数据会因为不同线程的请求而导致结果不一致。
同步其实就是相当于锁的作用.
这个同步,异步是指线程同步,线程异步。
线程同步在多线程中非常有用,它能够防止多个不同线程同时请求而可能造成的数据不一致。
在方法名前面加上修饰符synchronized,这个方法就是线程同步的。
在Hashtable中,所有的public方法都加上了synchronized,所以说Hashtable是同步的,而HashMap没有,
所以HashMap是异步的。
同步就是在多个一个对象被多个线程访问的时候,不会出错。
如connection ,线程1执行create connection;线程2执行 connection.close();线程1如果没有执行完,就被线程2close()掉了,就要出错,这就是异步。
如果标识为同步,该对象会加上关键字synchronized,意思是锁定对象,在同一时刻只有一个线程可以访问,其他线程处于等待状态,直到该线程执行完。
简单的讲,
异步就是可以同时多个线程修改HashMap,相对于HashTable就只能一个线程来更改。
很明显多个线程同时并发速度会比单个线程来的快,但是多线程就明显不安全了,因为有多个人在修改一个东西,这东西就时不时的变化,
所以用HashMap还是HashTable,看你在什么场合下用,但多线程程序下,要求数据统一性很高,那就用HashTable
我刚查看了下API文档,hashtable类中许多public方法都没有synchronized修饰啊?你怎么这么说?