自定义泛型与泛型的常见陷阱

文章目录

ArrayList

之前我们使用ArrayList没有使用泛型,是错误的我们要改正过来。

package fiftyFourth;

import java.util.ArrayList;
import java.util.List;

public class ArrayListTest {

	public static void main(String[] args) {
		List<String> list = new ArrayList<String>();
		
		list.add("a");
		list.add("b");
		list.add("c");
		list.add("d");
		for(int i = 0; i < list.size(); i++) {
			String value = list.get(i);
			System.out.println(value);
		}
	}
}

结果是:
a
b
c
d

Iterator

package fiftyFourth;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class ArrayListTest {

	public static void main(String[] args) {
		List<String> list = new ArrayList<String>();
		
		list.add("a");
		list.add("b");
		list.add("c");
		list.add("d");
		for(int i = 0; i < list.size(); i++) {
			String value = list.get(i);
			System.out.println(value);
		}
		
		for(Iterator<String> iterator = list.iterator(); iterator.hasNext();) {
			String value = iterator.next();
			System.out.println(value);
		}
	}
}

结果是:
a
b
c
d
a
b
c
d

Set

package fiftyFourth;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class SetTest {

	public static void main(String[] args) {
		Set<String> set = new HashSet<String>();
		
		set.add("aa");
		set.add("bb");
		set.add("cc");
		
		for(Iterator<String> iterator = set.iterator(); iterator.hasNext();) {
			String value = iterator.next();
			System.out.println(value);
		}
	}
}

结果是:
aa
bb
cc

package fiftyFourth;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class SetTest {

	public static void main(String[] args) {

		Set<People> set2 = new HashSet<People>();
		
		set2.add(new People("zhangsan", 20, "beijing"));
		set2.add(new People("lisi", 30, "shanghai"));
		set2.add(new People("wangwu", 40, "tianjing"));
		
		for(Iterator<People> iterator = set2.iterator(); iterator.hasNext();) {
			People people = iterator.next();
			
			String name = people.getName();
			int age = people.getAge();
			String address = people.getAddress();
			
			System.out.println(name + "," + age + "," + address);
		}
		
	}
}

class People{
	private String name;
	private int age;
    private String address;
    
    public People (String name,int age, String address) {
    	this.name = name;
    	this.age = age;
    	this.address = address;
    	
    }

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((address == null) ? 0 : address.hashCode());
		result = prime * result + age;
		result = prime * result + ((name == null) ? 0 : name.hashCode());
		return result;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		People other = (People) obj;
		if (address == null) {
			if (other.address != null)
				return false;
		} else if (!address.equals(other.address))
			return false;
		if (age != other.age)
			return false;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		return true;
	}
    
    
}

结果是:
wangwu,40,tianjing
lisi,30,shanghai
zhangsan,20,beijing

Map

package fiftyFourth;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

import javax.swing.RowFilter.Entry;

public class MapTest {

	public static void main(String[] args) {
		Map<String, String> map = new HashMap<String, String>();
		
		map.put("a", "aa");
		map.put("b", "bb");
		map.put("c", "cc");
		map.put("d", "dd");
		
		Set<String> set = map.keySet();
		
		for(Iterator<String> iterator = set.iterator(); iterator.hasNext();) {
			String key = iterator.next();
			String value = map.get(key);
			
			System.out.println(key + ":" + value);
		}
		
		System.out.println("-------------------");
		
		Set<Map.Entry<String, String>> set2 = map.entrySet();
		//map.entrySet()返回的是Map.Entry类型的变量,同时Map.Entry也要规定泛型。
		for(Iterator<Map.Entry<String, String>> iterator = set2.iterator(); iterator.hasNext();) {
			Map.Entry<String, String> entry = iterator.next();
			String key = entry.getKey();
			String value = entry.getValue();
			
			System.out.println(key + ":" + value);
		}
	}
}

结果是:
a:aa
b:bb
c:cc
d:dd


a:aa
b:bb
c:cc
d:dd

猜你喜欢

转载自blog.csdn.net/weixin_43907332/article/details/85879865