集合框架map,List和set
一,UDP协议
1.UDP协议使用DatagramSocket,ds对象可以用来接收和发送数据,不涉及IO流
2.准备接收数据的时候需要指定端口号
3.UDP协议不适合传递大数据,适合小而频繁的数据,若接收长度小于发送长度会出现丢包
4.接发数据代码
DatagramSocket ds = newDatagramSocket(7788);//绑定端口
byte[] buf = new byte[1024];接收数组长度1024
DatagramPacket packet = new DatagramPacket(buf,buf.length);.//创建数据包对象
ds.receive(packet);//接收数据包
String data = new String(packet.getData(),0,packet.getLength());//由byte转为字符串String
DatagramSocket ds = new DatagramSocket();//创建DatagramSocket对象
String s = "Hello World";//定义一个字符串
byte[] buf = s.getByte();//接收字节数组长度为1024
DatagramPacket dp = new DatagramPacket(buf,buf.length,new InetSocketAddress("127.0.0.1",7788);//发送的数据包,参数需要有数据,数据长度,及ip和端口号
ds.send(dp);//发送数据
二,集合set
1.set中不能够添加重复性的数据.
2.set没有办法根据下标取数据,即没有办法取出指定数据,要想使用set中的数据只能遍历
3.set里面的数据是没有顺序可言的,无论你以什么样的顺序,向set中添加数据遍历取出的顺序都是不一定和添加的顺序一样.
4.Hashcode:元素的哈希值是通过元素的hashcode方法 来获取的, HashSet首先判断两个元素的哈希值,如果哈希值一样,接着会比较equals方法 如果 equls结果为true ,HashSet就视为同一个元素。如果equals 为false就不是同一个元素.在IDEA中使用快捷键cmd+n,选择equals()&hashCode().把判断的属性勾选上即可.
5.迭代器
Set<Integer> set = new hashSet<>();//创建集合对象
set.add(1); //添加元素
set.add(2);
Iterator<Integer> iterator = set.iterator();//将一个集合对象转为迭代器
while(iterator.hasNext()){ //如果没有元素可取则iterator.hasNext()返回值为false,停止循环
Integer i = iterator.next();//取出下一个元素
if(i%2== 0){ //删除数组中的偶数
iterator.remove();//用迭代器删除数据,不会涉及到索引的问题,安全行高
}
}
- ---| Itreable 接口 实现该接口可以使用增强for循环
- ---| Collection 描述所有集合共性的接口
- ---| List接口 可以有重复元素的集合
- ---| ArrayList
- ---| LinkedList
- ---| Set接口 不可以有重复元素的集合
- ---| HashSet 线程不安全,存取速度快。底层是以哈希表实现的。
三,构造代码块
1. 在类中直接用{}括起来的代码,叫做构造代码块.常用于初始化.
2. 只在new对象的时候会执行,并且创建一次对象,就会执行一次
3. 代码:
public static void main(String[] args){
show(new HashSet<Integer>(){{
add(1);
add(2);
}});
}
public static void show(Set<Integer> set){
for(Integer integer : set){
System.out.prinln(integer);
}
}
四,集合:map接口中键和值一一映射. 可以通过键来获取值。map不具有可迭代性
1.HashMap是一种key-value的数据模型,HashMap<K,V>
2.遍历map的代码:
Map<Integer String> map = new HashMap<>();
map.put(1,"张三");//添加键值对
map.put(2,"李四");//key是惟一的
map.put(3,"张三");//value可以对应多个key
map.put(1,"王五");//将key为1的键重新赋值value为王五
Set<Integer> integers = map.keySet();//将key集合到set,方可进行遍历
for(Integer integer : Integers){
String value = map.get(Integer);//通过键key取值value
}