集合
- java的集合就像容器一样,是用来存储java类的对象,功能多,方便查找,存入,取出。
- 集合里面一般只能保存对象,就是保存对象的引用的变量,
Collection接口
1.List 有序,可重复
ArrayList:
优点: 底层数据结构是数组,查询快,增删慢。
缺点: 线程不安全,效率高
LinkedList:
优点: 底层数据结构是链表,查询慢,增删快。
缺点: 线程不安全,效率高
Vector:
优点: 底层数据结构是数组,查询快,增删慢。
缺点: 线程安全,效率低
2.Set 无序,唯一
(1)HashSet:
底层数据结构是哈希表。(无序,唯一)
保证元素唯一性可以依赖两个方法:hashCode()和equals()
HashSet底层数据结构采用哈希表实现,元素无序且唯一,线程不安全,效率高,可以存储null元素,元素的唯一性是靠所存储元素类型是否重写hashCode()和equals()方法来保证的,如果没有重写这两个方法,则无法保证元素的唯一性。
具体实现唯一性的比较过程:
1.存储元素时首先会使用hash()算法函数生成一个int类型hashCode散列值,然后已经的所存储的元素的hashCode值比较,如果hashCode不相等,肯定是不同的对象。
2.hashCode值相同,再比较equals方法。
3.equals相同,对象相同。(则无需储存)
(2)LinkedHashSet:
底层数据结构是链表和哈希表。(FIFO插入有序,唯一)
1.由链表保证元素有序
2.由哈希表保证元素唯一
LinkedHashSet底层数据结构采用链表和哈希表共同实现,链表保证了元素的顺序与存储顺序一致,哈希表保证了元素的唯一性。线程不安全,效率高。
3.Map接口:
Map用于保存具有映射关系的数据,Map里保存着两组数据:key和value,它们都可以使任何引用类型的数据,但key不能重复。所以通过指定的key就可以取出对应的value。
Map接口有四个比较重要的实现类,分别是HashMap、LinkedHashMap、TreeMap和HashTable。
最主要的区别。
TreeMap是有序的,HashMap和HashTable是无序的。
Hashtable的方法是同步的,HashMap的方法不是同步的。
Object类
传递任何类型的类来使用
显示继承:
public class A extends Object{
}
隐式继承:就是不把extends Object 写出来
方法:
projected Object clone()/** 创建并且返回一个对象的拷贝**/
boolean equals(Object obj) /** 比较两个对象是否相等,用来比较两个引用的虚地址。当且仅当两个引用在物理上是同一个对象时,返回值为true,否则将返回false。**/
protected void finalize() /** 垃圾回收器确定不存在对该对象有更多的有引用的时候,会使用该方法**/
Class<?>getClass()/**获取该对象运行时候的类**/
int hashCode() /**获取对象的hash值**/
void notify() /**唤醒该对象上等待某个线程**/notifyAll则是/**等待的所有线程
String toString /**返回对象的字符串表示形式**/
void wait() /**让当前线程进入等待状态**?/
java序列化
就是把你得到对象拿出来,要把它封装起来。可以方便可以在网络上传输。
要想序列化成功要满足两个条件
该类必须实现 java.io.Serializable 接口。
该类的所有属性必须是可序列化的。
主要的类
//在项目中,服务端和客户端交互时,获取客户端传过来的信息时用这个会更好,否则可能会存在数据乱序的问题
序列化 ObjectOutputStream负责将对象写入字节流。
ObjectInputStream objectInputStream = new ObjectInputStream(clientSocket.getInputStream());
反序列化 ObjectInputStream从字节流重构对象。就是把对象从数据源还原回来
User userInformation=(User)objectInputStream.readObject();