集合常用总结

集合常用总结

List接口是一个有序的 Collection,使用此接口能够精确的控制每个元素插入的位置,能够通过索引(元素在List中位置,类似于数组的下标)来访问List中的元素,第一个元素的索引为 0,而且允许有相同的元素。 List 接口存储一组不唯一,有序(插入顺序)的对象。

Set 接口存储一组唯一,无序的对象。

Map 接口存储一组键值对象,提供key(键)到value(值)的映射。


  • Set 接口实例存储的是无序的,不重复的数据。List 接口实例存储的是有序的,可以重复的元素。
  • Set检索效率低下,删除和插入效率高,插入和删除不会引起元素位置改变 <实现类有HashSet,TreeSet>。
  • List和数组类似,可以动态增长,根据实际存储的数据的长度自动增长List的长度。查找元素效率高,插入删除效率低,因为会引起其他元素位置改变 <实现类有ArrayList,LinkedList,Vector>。

  • ArrayList 实现了List的接口,实现了可变大小的数组,随机访问和遍历元素时,提供更好的性能。该类也是非同步的,在多线程的情况下不要使用。ArrayList 增长当前长度的50%,插入删除效率低。
  • HashSet实现了Set接口,不允许出现重复元素,不保证集合中元素的顺序,允许包含值为null的元素,但最多只能一个。
  • HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。实现了Map接口,根据键的HashCode值存储数据,具有很快的访问速度,最多允许一条记录的键为null,不支持线程同步。
  • Vector 和ArrayList非常相似,但是该类是同步的,可以用在多线程的情况,该类允许设置默认的增长长度,默认扩容方式为原来的2倍。

  • 迭代器
  • 遍历ArrayList
import java.util.*;
 
public class Test{
 public static void main(String[] args) {
     List<String> list=new ArrayList<String>();
     list.add("Hello");
     list.add("World");
     list.add("HAHAHAHA");
     //第一种遍历方法使用 For-Each 遍历 List
     for (String str : list) {            
         //也可以改写 for(inti=0;i<list.size();i++) 这种形式
        System.out.println(str);
     }
     
   	  //第二种遍历,把链表变为数组相关的内容进行遍历
     String[] strArray=new String[list.size()];
     list.toArray(strArray);
     for(int i=0;i<strArray.length;i++) 
         //这里也可以改写为  for(String str:strArray) 这种形式
     {
        System.out.println(strArray[i]);
     }
     
    	//第三种遍历 使用迭代器进行相关遍历
     
     Iterator<String> ite=list.iterator();
     while(ite.hasNext())//判断下一个元素之后有值
     {
         System.out.println(ite.next());
     }
 }
}
  • 遍历Map

    import java.util.*;
     
    public class Test{
         public static void main(String[] args) {
          Map<String, String> map = new HashMap<String, String>();
          map.put("1", "value1");
          map.put("2", "value2");
          map.put("3", "value3");
          
          //第一种:普遍使用,二次取值
          System.out.println("通过Map.keySet遍历key和value:");
          for (String key : map.keySet()) {
           System.out.println("key= "+ key + " and value= " + map.get(key));
          }
          
          //第二种
          System.out.println("通过Map.entrySet使用iterator遍历key和value:");
          Iterator<Map.Entry<String, String>> it = map.entrySet().iterator();
          while (it.hasNext()) {
           Map.Entry<String, String> entry = it.next();
           System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
          }
          
          //第三种:推荐,尤其是容量大时
          System.out.println("通过Map.entrySet遍历key和value");
          for (Map.Entry<String, String> entry : map.entrySet()) {
           System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
          }
        
          //第四种
          System.out.println("通过Map.values()遍历所有的value,但不能遍历key");
          for (String v : map.values()) {
           System.out.println("value= " + v);
          }
         }
    }
    
import java.util.ArrayList;

public class CeShi{
	public static void main(String[] args){
		ArrayList<String> lizi = new ArrayList<String>();
		lizi.add("a");
		lizi.add("b");
		lizi.add("c");
		lizi.add("d");
		lizi.add("e");
		lizi.add("f");
		System.out.println(lizi);
		System.out.println(lizi.get(1));
		lizi.set(1,"w");
		System.out.println(lizi);
		lizi.remove(2);
		System.out.println(lizi);
		System.out.println(lizi.size());
		 for (String i : lizi) {
            System.out.println(i);
        }
		
	}
}
  • ArrayList排序
    • Collections 类也是一个非常有用的类,位于 java.util 包中,提供的 sort() 方法可以对字符或数字列表进行排序。
import java.util.Collections; 

Collections.sort(lizi);
  • 迭代 HashMap

可以使用 for-each 来迭代 HashMap 中的元素。想获取 key,可以使用 keySet() 方法,然后可以通过 get(key) 获取对应的 value,如果你只想获取 value,可以使用 values() 方法。

// 引入 HashMap 类      
import java.util.HashMap;

public class CeShi{
    public static void main(String[] args) {
        // 创建 HashMap 对象 Lizi
        HashMap<Integer, String> Lizi= new HashMap<Integer, String>();
        // 添加键值对
        Lizi.put(1, "Google");
        Lizi.put(2, "Runoob");
        Lizi.put(3, "Taobao");
        Lizi.put(4, "Zhihu");
        // 输出 key 和 value
        for (Integer i : Lizi.keySet()) {
            System.out.println("key: " + i + " value: " + Lizi.get(i));
        }
        // 返回所有 value 值
        for(String value: Lizi.values()) {
          // 输出每一个value
          System.out.print(value + ", ");
        }
    }
}
  • Java Iterator(迭代器)

    • 调用 it.next() 会返回迭代器的下一个元素,并且更新迭代器的状态。

      调用 it.hasNext() 用于检测集合中是否还有元素。

      调用 it.remove() 将迭代器返回的元素删除。

// 引入 ArrayList 和 Iterator 类
import java.util.ArrayList;
import java.util.Iterator;

public class CeShi{
	public static void main(String[] args){
		ArrayList<String> lizi = new ArrayList<String>();
		lizi.add("a");
		lizi.add("b");
		lizi.add("c");
		lizi.add("d");
        
        Iterator<String> it = lizi.iterator();
        // 输出集合中的第一个元素
        System.out.println(it.next());
        
        while(it.hasNext()) {
   			System.out.println(it.next());//迭代器 it 逐个返回集合中所有元素
        }
        
        while(it.hasNext()) {
            Integer i = it.next();
            if(i < 10) {  
                it.remove();  // 删除小于 10 的元素
            }
        }
}
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值