笔记
udp:
不需要建立链接既可以作为发送方也可以作为接收方
数据包大小有限制(64k) 效率高 不安全
使用的socket对象:
DatagramSocket: 数据报包套接字 既可以作为接收方 发送方的socket对象
指定一下端口 不指定端口 默认分配端口
send(DatagramPacket);
receive(DatagramPacket);
DatagramPacket:发送和接收的数据信息
通过不同的构造器 创建不同的包对象
发送包 :执行InetAddress ,端口
接收包 :指定接收的字节数组 以及长度 DatagramPacket 数据 发送方的ip 端口。。。
URL:
统一资源定位符
openConnection();---》 URLConnection:
URLConnection:
connect(); 建立链接
getInputStream();--》通过输入流 读取当前链接中的数据信息
getOutputStream();
api:application programing interface 别人写好实现[网络资源]。对外提供接口(url地址)。
通过学习接口的规则(使用已知的url 发送一个请求到对应的服务下)。api 会经过自己的服务器,返回给调用者一个结果。
集合:
1、一张图:
Collection(无序 可重复) Map(一对)
/ \ / \
Set List(有序,可重复) HashMap TreeMap
/ \ / \
HashSet TreeSet ArrayList LinkedList
2、三个知识点:
a、Iterator:迭代器 是一个接口 next();hasNext();remove();
迭代过程中小心并发修改异常
迭代集合元素时,不同的实现类中,其实内部维护了一个对应的实现类。
通过iterator方法 返回当前创建的实现类对象 对当前集合进行迭代
b、泛型:
泛型类
泛型方法
泛型接口
宽泛的类型 这个类型的确定依赖于:
1、创建某个类的对象 直接指定泛型的类型
2、调用具体方法时 确定其泛型类型
泛型的定义:
<T> <E>
c、比较器:
内部比较器:
当前比较的类 实现Comparable 接口 重写compareTo方法
定义好之后 如果需求更改 必须要重写
外部比较器:
创建集合对象时 指定比较器
比较器需要实现java.util.Comparetor接口 重写compare(t1,t2)方法。
根据用户需求重复定义 满足要求的比较器
可以通过匿名内部类实现
3、六个接口:
a、Collection:
存储元素的特点:无序 可重复
常见方法:add(Object) remove(Object); iterator();size();clear();
addAll(Coll). removeAll(Coll); isEmpty(); retainAll();
contains(Object);containsAll(Coll)
遍历方式:
foreach() iterator
b、List:
存储元素的特点:有序 可重复
常见方法:add(Object) remove(Object); iterator();size();clear();
addAll(Coll). removeAll(Coll); isEmpty(); retainAll();
contains(Object);containsAll(Coll)
多了一些对于索引的操作:
get(index); set(index,Object); add(index,Object);
remove(index); remove(Object);
遍历方式:
foreach() iterator for listIterator
c、Iterable:
java.lang.Iterable,foreach语句的目标。
d、set:
存储元素的特点:无序 唯一
常见方法:add(Object) remove(Object); iterator();size();clear();
addAll(Coll). removeAll(Coll); isEmpty(); retainAll();
contains(Object);containsAll(Coll)
遍历方式:
foreach() iterator
e、Map:
存储元素的特点:key-value
key 无序唯一 相当于一个Set集合
value 无序可重复 相当于一个Collection集合
常见方法:
put(k,v);返回集合中是否存在对应的k 如果存在 返回对应的值
如果不存在 返回null
remove(k);
containsKey(k); containsVlues(v);
get(k)
遍历方式:
遍历key: keySet()---> foreach/iterator
entrySet()---> foreach/iterator + (获取到一个Entry)+getkey();
遍历value:values()---> foreach/iterator
entrySet()---> foreach/iterator +(获取到一个Entry)+
getVlues();
keySet()---> foreach/iterator+map.getKey(k)
entrySet()---> foreach/iterator + (获取到一个Entry)+map.getKey(Entry.getkey());
遍历key-value:
keySet()---> foreach/iterator+map.getKey(k)
entrySet()---> foreach/iterator + entry.getKey()/entry.getValue();
Entry:
内部维护了当前map集合中的所有元素。(键-值)。
对外提供了获取键和值的方法 getKey() getValue()
map的实现类中通过内部类 都实现了Entry。实现类的对象中存在当前
map中的所有数据信息。
4、9个常用类:
ArrayList:
底层实现方式:
数组(长度可变的)
存储元素特点;
遍历 随机访问 效率高 添加 删除效率低
常见方法:
add(Object) remove(Object); iterator();size();clear();
addAll(Coll). removeAll(Coll); isEmpty(); retainAll();
contains(Object);containsAll(Coll)
多了一些对于索引的操作:
get(index); set(index,Object); add(index,Object);
remove(index); remove(Object);
迭代方式:
foreach() iterator for listIterator
LinkedList:
底层实现方式:
链表
存储元素特点;
遍历 随机访问 效率低 添加 删除效率高
常见方法:
add(Object) remove(Object); iterator();size();clear();
addAll(Coll). removeAll(Coll); isEmpty(); retainAll();
contains(Object);containsAll(Coll)
多了一些对于表头表尾的操作:
getFirst(); getLast();
迭代方式:
foreach() iterator for listIterator
HashSet:
底层实现方式:
哈希表 (数组[存储元素位置]以及链表[存储数据])
1.8之后 如果执行了rehash算法 将链表转为红黑树(二叉树)
线程不安全。ConcurrentHashXXX。去解决
存储元素特点;
遍历 效率高 添加 删除效率高
常见方法:
add(Object) remove(Object); iterator();size();clear();
addAll(Coll). removeAll(Coll); isEmpty(); retainAll();
contains(Object);containsAll(Coll)
迭代方式:
foreach() iterator
注意:
如果将自定义对象作为hashset存储的元素,要注意,自定义对象所属的类(new的对象肯定是唯一的,大多数业务逻辑中可能看的是当前对象中的属性是否一致)必须要重写hashCode(原来计算当前存储元素的位置) 以及equals(确保存储元素是否唯一)方法。
TreeSet:
LinkedHashSet:
HashMap:
TreeMap:
Arrays:
对于数组的工具类:
sort();排序指定数组
binarySearch();对于排好序的数组进行查找
Collections:
对于集合的工具类:
sort();排序指定集合
binarySearch();对于排好序的集合进行查找