黑马程序员——集合3


------ Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

< 今日心情 >放掉懒惰,再加上一份坚持

一、Map

1.特点

Map在集合框架中与Collection属于并列存在
Map存储的是键值对,键要保证唯一性

2.Map方法

添加:
put(K key, V value)
putAll(Map<? extends K,? extends V>)
删除:
clear()
remove(Object key)
判断:
containsKey(Object key)
containsValue(Object value)
isEmpty()
获取:
get(Object key)
size()
values()

entrySet()
keyset()

3.HashTable

底层是哈希表数据结构,不可以存入null键null值,集合线程同步,由于效率低已经被HashMap替代

4.HashMap

底层是哈希表数据结构,可以存入null键null值,该集合线程不同步
hashCode和equals保证键的唯一性
import java.util.*;
class Student
{
	private String name;
	private int age;
	public Student(String name,int age)
	{
		this.name=name;
		this.age=age;
	}
	public String getName()
	{
		return name;
	}
	public int getAge()
	{
		return age;
	}
	public int hashCode()
	{
		return name.hashCode()+age*19;
	}
	public boolean equals(Object o)
	{
		Student s;
		if(!(o instanceof Student))
		{
			return false;
		}
		s=(Student)o;
		if(this.getName()==s.getName())
		{
			return new Integer(this.getAge()).equals(new Integer(s.getAge()));
		}
		return this.getName().equals(s.getName());
	}
}
class HashMapDemo
{
	public static void main(String[] args) 
	{
		HashMap
      
      
       
        hm=new HashMap
       
       
        
        ();
		hm.put(new Student("zhang01",11),"初中");
		hm.put(new Student("zhang02",15),"初中");
		hm.put(new Student("zhang03",25),"初中");
		hm.put(new Student("zhang04",5),"初中");
		hm.put(new Student("zhang05",35),"初中");
		hm.put(new Student("zhang03",25),"高中");

		
		/* 
		Set
        
        
         
         
          
          > meSet=hm.entrySet();  //通过entrySet方法返回Set集合
		Iterator
          
           
           
             > i=meSet.iterator();//接下来就是在Set的操作方法 while(i.hasNext()) { Map.Entry 
            
              me=i.next(); System.out.println(me.getKey().getName()+":"+me.getKey().getAge()); System.out.println("我在上:"+me.getValue()); } */ //简化书写 for(Map.Entry 
             
               me : hm.entrySet()) { System.out.println(me.getKey().getName()+":"+me.getKey().getAge()); System.out.println("我在上:"+me.getValue()+"\n"); } } } 
              
             
            
          
         
         
        
        
       
       
      
      

5.TreeMap

底层是二叉树数据结构,可以对集合进行排序
用比较器来排序并保证键的唯一性
import java.util.*;
class Student
{
	private String name;
	private int age;
	public Student(String name,int age)
	{
		this.name=name;
		this.age=age;
	}
	public String getName()
	{
		return name;
	}
	public int getAge()
	{
		return age;
	}
}
class StuComp implements Comparator
      
      
       
       
{
	public int compare(Student s1,Student s2)
	{
		if(s1.getName()==s2.getName())
		{
			return new Integer(s1.getAge()).compareTo(new Integer(s2.getAge()));
		}
		return s1.getName().compareTo(s2.getName());
	}
}
class TreeMapDemo
{
	public static void main(String[] args) 
	{
		TreeMap
       
       
        
         tm=new TreeMap
        
        
         
         (new StuComp());
		tm.put(new Student("zhang01",11),"初中");
		tm.put(new Student("zhang02",15),"初中");
		tm.put(new Student("zhang03",25),"初中");
		tm.put(new Student("zhang03",15),"初中");
		tm.put(new Student("zhang05",35),"初中");
		tm.put(new Student("zhang03",25),"高中");
		/*
		Set
         
         
          
           keySet=tm.keySet();//获取键的集合
		Iterator
          
          
            i=keySet.iterator(); while(i.hasNext()) { Student s=i.next(); System.out.println(s.getName()+":"+s.getAge()); System.out.println("我在上:"+tm.get(s)+"\n");//通过键获取值 } */ //简化代码 for(Student s : tm.keySet()) { System.out.println(s.getName()+":"+s.getAge()); System.out.println("我在上:"+tm.get(s)+"\n"); } } } 
          
         
         
        
        
       
       
      
      

二、 工具类

1.Collections

 操作集合的工具类,类中的方法都是静态方法
import java.util.*;
class Student
{
	private String name;
	private int age;
	public Student(String name,int age)
	{
		this.name=name;
		this.age=age;
	}
	public String getName()
	{
		return name;
	}
	public int getAge()
	{
		return age;
	}
}
class StuComp implements Comparator
     
     
      
      
{
	public int compare(Student s1,Student s2)
	{
		if(s1.getName()==s2.getName())
		{
			return new Integer(s1.getAge()).compareTo(new Integer(s2.getAge()));
		}
		return s1.getName().compareTo(s2.getName());
	}
}
class CollectionsDemo
{
	public static void main(String[] args) 
	{
		TreeMap
      
      
       
        tm=new TreeMap
       
       
        
        (Collections.reverseOrder(new StuComp()));
		//Collections.reverseOrder(new StuComp()),返回的是一个比较器,它逆转了原比较器的顺序
		/*
		Map cm=Collections.checkedMap(tm);//将tm转换成线程安全的集合
										// 获得最大值最小值
										//使用二分查找方法查找指定的List集合中的元素
		*/
		tm.put(new Student("zhang01",11),"初中");
		tm.put(new Student("zhang02",15),"初中");
		tm.put(new Student("zhang03",25),"初中");
		tm.put(new Student("zhang03",15),"初中");
		tm.put(new Student("zhang05",35),"初中");
		tm.put(new Student("zhang03",25),"高中");
		
		for(Student s : tm.keySet())
		{
			System.out.println(s.getName()+":"+s.getAge());
			System.out.println("我在上:"+tm.get(s)+"\n");
		}
	}
}

       
       
      
      
     
     

2.Arrays

操作数组的工具类
import java.util.*;
class ArraysDemo
{
	public static void main(String[] args) 
	{
		Integer[] num={1,2,32,21,14,8};
		List
      
      
       
        l=Arrays.asList(num);
		//返回一个长度固定的List集合
		//返回的集合长度固定,List中增删方法失效
		/*
		通过集合的toArray()方法可以获得数组
		Integer[] newNum=l.toArray(new Integer[l.size()]);
		*/
		/*
		asList			返回固定长度的List集合
		binarySearch	折半查找
		copyOf			复制数组数据
		equals			判断数组相等
		fill			填充数据
		hashCode		基于数组内容返回哈希值
		sort			排序
		toString		数组转成字符串
		
		*/
		
	}
}

      
      

三、新增for语句

格式

for(数据类型 变量名 : 数组或集合)

{
执行语句;
}

作用:遍历获得集合中的元素

限制:只能对集合遍历,不能操作集合

四、函数的Param参数

格式

返回值类型 函数名(数据类型 …… 形式参数)
{
执行语句;
}

其实就是数组的另一种形式

class ParamFunctionDemo 
{
	public static void main(String[] args) 
	{
		fun("num1",1,2,3,4);
		fun("num2",2,6,3,7,8,0,9);
	}
	public static void fun(String name,int...param)//注意int...只能写在形参的末尾,且只能有一个
	{
		System.out.print(name+":");
		for(int i : param)
		{
			System.out.print(i);
		}
		System.out.println();
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值