java对集合和迭代的操作基础总结

时间:2022-09-03 07:47:17
 Collections类,可以对Set、List和Map等集合进行操作的工具类,常用方法:

static void shuffle(List list):对list集合元素进行随机排序,eg:洗牌;

static void reverse(List list):反转list集合元素的顺序;

static void sort(List list,Comparator c):根据指定的比较器对list进行排序;

static void swap(List list,int i,int j):对list集合中的i处和j处元素互换;

static int binarySearch(List list,Object key):使用二分查找法找出key在list中的索引;

static Comparator<T> reverseOrder(比较器):强行逆转比较器;

static boolean replaceAll(List list , 旧对象,新对象):使用新对象替换list中所有指定的旧对象

 

 

 

Map:存储的是键值对,且保证键的唯一性

!——Hashtable:哈希表数据结构,不可以存入null键和null值,线程同步;

!——HashMap:哈希表数据结构,可以存null键和null值,线程不同步;

!——TreeMap:实现SortedMap接口,底层二叉树,不同步,对key排序。

Map集合类没有遍历集合的直接方法,只能通过Map对象的keySet()获取键的Set集合,在通过Set集合的迭代器获取键和值,或者调用entrySet()获取键和值的映射关系再存入到Set集合中,分别同Map.Entry接口中方法getKey()和getValue()获取键和值。当然,既然也可以通过增强for循环获取,具体三种方法代码如下:

 

<span style="font-size:18px;">package com.xiongmc.Collection;

/*

* 存入学生(姓名,年龄,地址)

* 按学生姓名拼音排序 * 学生姓名和年龄相同视为同一个人 */ import java.util.*; publicclass HashMapTest { @SuppressWarnings("unchecked") publicstaticvoid main(String[] args){ Map<Students,String> hs =new HashMap(); hs.put(new Students("zhangsan",23),"xizang"); hs.put(new Students("lisi",20),"*"); hs.put(new Students("wangwu",25),"neimenggu"); hs.put(new Students("yangma",19),"guangxi"); //第一种取出方式 Set<Students> keyset = hs.keySet(); Iterator<Students> it = keyset.iterator(); while(it.hasNext()){ Students s = it.next(); System.out.println(s.toString()+".."+hs.get(s)); } //第二种取出方式 Set<Map.Entry<Students,String>> en = hs.entrySet(); Iterator<Map.Entry<Students, String>> iter = en.iterator(); while(iter.hasNext()){ Map.Entry<Students,String> me = iter.next(); Students stu = me.getKey(); String addr = me.getValue(); System.out.println(stu+"..."+addr); } //第三种取出方式 for(Object key : hs.keySet()){ System.out.print(key+"--->"); System.out.println(hs.get(key)); } } } class Studentsimplements Comparable<Students>{ private String name; privateint age; public Students(String name,int age){ this.name = name; this.age = age; } publicint compareTo(Students s){ int num =this.name.compareTo(s.name); if(num==0){ returnnew Integer(this.age).compareTo(s.age); } return num; } //以下hashCode()和equals()保证键的唯一性 publicint hashCode(){ return name.hashCode()+age*5; } //重写equals方法 publicboolean equals(Object obj){ if(!(objinstanceof Students)){ thrownew ClassCastException("类型不匹配!"); } Students s = (Students)obj; returnthis.name.equals(s.getName()) &&this.age==s.getAge(); } //类的基本方法定义 public String getName(){ return name; } publicint getAge(){ return age; } public String toString(){ return name+".."+age; } }</span>

 

 

 

迭代器Iterator接口,用来遍历Collection集合元素,只有三个方法:

boolean hasNext():如果集合中还有没被遍历的,返回true

Object next():返回集合里的下一个元素;

void remove():删除集合里上一次next方法返回的元素。

 

List:有序集合,元素可以重复,有索引

!——ArrayList:数据结构使用的是数组结构,查询快,增删慢,长度可变;

!——LinkedList:底层数据结构使用的链表,增删速度快,查询慢,

Set:无序集合,元素不可以重复

!——HashSet:数据机构是哈希表,线程非同步,元素值可以是null存放到此集合中的对象应该重写hashCode()equals(),hashCode值是判断元素是否一致的唯一标准,因采用hash算法,效率比较高。

TreeSet:采用二叉树数据结构,可对Set集合中的元素排序;存放到此集合中的对象要么实现Comparable接口,要么可以在构造TreeSet对象的时候传递一个实现了Comparator接口的比较器对象。关于比较器的设计,需要实现Comparetor接口