疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

Java-集合排序,队列,散列表map以及如何遍历


 

 
 
1.1集合排序 
可以通过集合的工具类java.util.Collections的静态方法sort需要注意的时,只能对List排序,因为它有序.
Collections.sort(list);
排序字符串:字符串排序是按照字符串字符的编码顺序排序的 
如果要将字符串按照自己想要的方式排序就自定义元素类型实现Comparable接口重写int compareTo(Point o)方法
实现comparable接口后需要重写的方法compareto,该方法是用来定义当前对象(this)与参数对象(o)之间的大小关系,返回值不关注具体取值,值关注范围:
当返回值>0:当前对象大于参数对象(this>0)
当返回值<0:当前对象小于参数对象
当返回值=0:两个对象相等
1.2队列java.util.Queue
队列可以存放一组元素,存取元素必须遵循:FIFO即:first input first output 先进先出 queue 接口集成自collection
方法:
boolean offer(E e)入队操作,将给定的元素添加到队列末尾
E poll()出队操作,取出对首元素,取出后该元素就从队列删除
E peek()引用对首元素,获取对首元素,但是该元素还在队列中
双端队列 Deque,Deque继承自接口Queue,双端队列就是两端都可以进出的队列
方法:
boolean offer(E e)入队操作,将给定的元素添加到队列末尾
boolean offerFirst(E e)入队操作,将给定的元素添加到队首,同上
boolean offerLast(E e)入队操作,将给定的元素添加到队列末尾,同上
E poll()出队操作,取出对首元素,取出后该元素就从队列删除
E pollLast()队操作,取出对首元素,取出后该元素就从队列删除
E peek()引用对首元素,获取对首元素,但是该元素还在队列中
2 散列表Map:java.util.MapMap 查找表以key-value对的形式存放元素。所以看起来像是一个多行的表格。
map要求key不允许重复(equals比较为true)
常用实现类 java.util.HashMap散列表,使用散列表算法实现的map
v put(K k, V v)将给定的kv添加进map中若给定的key在map中已经存在,由于map要求key不允许重复,所以这是为替换value操作返回值为这个key原来对应的value值若key在map中不存在,则返回null,使用相同key替换value操作
v get(K k)根据给定的key获取对应的value,若给定的key在当前map中不存在,则返回null
remove(K k)根据key删除元素
3影响散列表查询新能的一个因素是:产生链表而链表的产生的一个主要因素是:
作为key的元素hashcode值一样,而equals比较不为true
hashcode值一样时,在map内部数组的位置相同,但是若key不同,那么就会在该位置产生一个链表,遍历链表检索数据会降低hashmap检索性能
所以要避免
因此在api文档中也有说明对equals与hashcode的重写要求:
1.成对重写,即:当重写一个类的equals方法时,就应当连同重写hashcode方法
2.一致性,即:当两个对象equals比较为true时,hashcode方法返回的数字应该相等,反之,两个对象hashcode相等,equals比较应当为true否则会在hashmap中产生链表
3.稳定性,即:当一个对象参与equals比较的属性的值没有发生改变的前提下,多次调用hashcode返回的数字应当不变。
另一个影响散列表查询速度的因素是,散列表默认初始时散列通大小为16,每当散列表容量达到75%时就会进行扩容,而又因为散列表元素位置是根据hashcode值进行计算产生的位置,当容量产生变化的时候而又保证散列表中元素依然能找到就需要经原有的元素进行重新遍历,也就是当散列表在扩容的时候会产生额外的运算,想要解决这个问题需要从散列表容量进行考虑。
map的遍历
遍历map有三种方式
1 遍历所有的key
遍历所有的keyset<K> heyset();将当前map中所有的key存入一个set集合后返回,遍历该集合等同于遍历了map中所有的key
2 遍历所有的键值对(entry)
获取每一组键值对set<entry> entrySet()map将每一个键值对以一个entry的势力保存entry是map的内部类,提供了两个常用的方法getkey() getvalue()
3 遍历所所有的value(不常用)
遍历所有的valueCollection values()将当前map中所有value存入一个集合后返回