代码改变世界

初学集合,以及泛型

2016-09-26 13:57  宇航员舒克  阅读(208)  评论(0编辑  收藏  举报
package jiheke1;

public class person {
	private String name;
	private String age;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAge() {
		return age;
	}
	public void setAge(String age) {
		this.age = age;
	}
	public person(String name, String age) {
		super();
		this.name = name;
		this.age = age;
	}
	public person() {
		super();
		// TODO Auto-generated constructor stub
	}
	@Override
	public String toString() {
		return "person [name=" + name + ", age=" + age + "]";
	}
	
	
}





package jiheke1;

public class student extends person {

	public student() {
		super();
		// TODO Auto-generated constructor stub
	}

	public student(String name, String age) {
		super(name, age);
		// TODO Auto-generated constructor stub
	}

	
}




package jiheke1;
										//集合——List集合——常用集合 

// java中几种集合的层次关系:
//										——定义方式:List<泛型> 集合名称=new 实现类<>();或者:实现类List<泛型> 集合名称=new 实现类<>();
// 接口collection——接口List(列表)——ArrayList——特点:可变数组,有序,可以使用索引。可以添加重复数据
//										——用法:添加:add(对象),添加在集合的末尾
//												  add(索引,对象),在索引位置添加	
//											      获取:get(索引)			
//											      修改:set(索引,对象)	
//											      长度:size()		
//											      移除:clear()	
//											      查找:indexOF(对象)返回找到的首个对象的索引值,如果没找到返回-1。		
//											      存在:contains(对象)返回boolean值
//										   	      遍历:见本页第75行
//												  1.for()
//											  	  2.foreach
//											  	  3.迭代器:获取:iterator<>迭代器名称=集合对象.iterator
//														 使用:while(hasNext()) 判断能否移动指针(即:判断判断是否存在下一次移动){移动指针到一下一条数据上,同时获取数据}			
//														remove:移除数据

//			  			——LinkedList——以链表额形式保存数据,相对于ArrayList修改和删除快,随机存储速度慢,可变数组,有序,可以使用索引。可以添加重复数据

//	     	  ——接口set(集合)——内部调用treeMap的方法

// 接口Map(映射)——存放的是键值对的集合,其中key值不可以重复,value。可以重复无序不可以使用索引
//			 ——定义方式:Map<key的类型,value的类型> 集合名称=new 实现类<>();
//			 ——方法:
//			 ——添加put(key,value)如果k不存在就表示添加value,如果k存在,就覆盖旧的value
//			 ——获取:get(key)
//			 ——长度:size(key)
//			 ——移除:remove(key)  ——清除:calea(key)   ——存在:containskey(k)    ——存在:containsvalue(v)
//			 ——遍历:详情请见Mapjihe
import java.util.ArrayList; 
import java.util.Iterator;
import java.util.List;

public class ke1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		//list集合——list实际是个一个接口,表示数据列表,可以理解为可变数组。
		//特点:有序,长度可变
		//<>表示泛型,里面承载着该集合的数据类型.
		//泛型  是在jdk1.5才加入的(没有泛型之前这么定义List集合:List ls=new ArrayList();——不能确定集合的数据类型)
		List ls1=new ArrayList();
		ls1.add(456);//只能使用object接受数据
		//需要用实现类进行实例化
		List<String> ls=new ArrayList<>();//ArrayList表示他的实现类,相当于实例化一样
		//或者这么写
		//ArrayList<String> ls=new ArrayList<>();
		//把数据放入集合
		ls.add("abc");//使用明确的数据类型接受数据。
		List<Integer> ls2=new ArrayList<>();
		ls2.add(123);
		
		
		
		
		//新建一个List集合
		List<person> lsp=new ArrayList<person>();
		
		//添加数据,插入不带索引号的add——相当于给集合按顺序写入
		person p3=new person("z","123");
		lsp.add(p3);
		//或者直接下面的写法;
		lsp.add(new person("A","20"));
		lsp.add(new person("C","21"));
		lsp.add(new person("B","22"));
		lsp.add(new person("D","23"));
		//插入数据,插入带索引号indest的写法
		lsp.add(1,new person("E","10"));//1位集合的索引号位置,1号位

		//添加子类的实例
		
		//获取长度
		System.out.println("size="+lsp.size());
		
		//查询数据,查找某个数据所在位置的索引
		//System.out.println(lsp.indexOf(new person("A","20"))); 错误方法
		System.out.println(lsp.indexOf(p3));
		
		//判断是否存在这个内容
		System.out.println(lsp.contains(p3));
		
		//遍历集合方式
		for(int i=0;i<lsp.size();i++)
		{
			System.out.println(i+"="+lsp.get(i));
		}
		//foreach
		for(person p:lsp)
		{
			System.out.println(p);
		}
		System.out.println("size="+lsp.size());
		//迭代器
		System.out.println("迭代器");
		//获取迭代器,可以看做是个指针。获取迭代器时,指针指向第一条记录的前面。集合的外面
		Iterator<person> it =lsp.iterator();
		//先判断能否移动,移动指针
		while (it.hasNext())
		{	//移动指针到一下一条数据上,同时获取数据
			person p=it.next();
			System.out.println(p);
			
			//移除数据
			if(p==p3)
			{
				it.remove();
			}
		}
		System.out.println("size="+lsp.size());
		//取数据
		person p0=lsp.get(0);
		//显示对象的所有属性的值
		System.out.println(p0.toString());//toString()方法,现在class内部(person)中重写toString()方法。toString()方法可以自动生成在源码菜单。
		//修改数据
		lsp.set(0, new person("F","30"));//0位集合的索引号位置,0号位
		System.out.println(lsp.get(0));
		//移除异常
		lsp.remove(1);
		System.out.println("size="+lsp.size());
		//清除数据
		lsp.clear();
		System.out.println("size="+lsp.size());
		//查询数据
		
		
		
	}

}



package jiheke1;
										//集合——set集合
import java.util.HashSet;

import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;

public class setjihe {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//实现类HashSet
		//不能存放重复值的数据,没有顺序和索引。
		Set<person> s1=new HashSet<>();
		person p0=new person("A","20");
		//不能存放重复数据,但是存放了也不报错
		s1.add(p0);
		s1.add(p0);
		s1.add(p0);
		s1.add(null);//可以放空
		
		s1.add(new person("B","20"));
		s1.add(new person("D","20"));
		s1.add(new person("F","20"));
		s1.add(new person("G","20"));
		System.out.println("长度="+s1.size());
		//取,用遍历的方式取出,不能用get
		
		//remove移除
		s1.remove(p0);
		System.out.println("长度="+s1.size());
		//判断是否存在
		System.out.println(s1.contains(p0));
		//遍历
		for(person p:s1)
		{
			System.out.println(p);
		}
		System.out.println("长度"+s1.size());
		//Iterator迭代器
		Iterator<person> it=s1.iterator();
		//先判断能否移动,移动指针
		while(it.hasNext())
		{
			person p=it.next();
			System.out.println(p);
		}		
		
		
		
		
		
		//treeset——对内容可以按一定abcd的顺序排序,但是只支持可以排序的内容如abcd.....   
		//不可以方null
		TreeSet<String> ts=new TreeSet<>();
//		ts.add(null)  不可以方空
		ts.add("a");
		ts.add("A");
		ts.add("d");
		ts.add("f");
		ts.add("e");
		for(String a:ts)
		{
			System.out.println(a);
		}
		
	}
	
}



package jiheke1;
											//集合——映射Map	 
										//常用集合
import java.util.HashMap;  

import java.util.Map;
import java.util.TreeMap;

import javax.swing.plaf.synth.SynthScrollBarUI;

public class Mapjihe {

	public static void main(String[] args) {
		//HashMap
		Map<String, String>m1=new HashMap<>();
		//添加数据
		m1.put("0531", "济南");//k,v——此处k不可以重复,v可以重复
		m1.put("0532", "青岛");
		m1.put("0533", "淄博");
		m1.put("0531", "章丘");//如果key重复,新的value覆盖旧的value。
		m1.put("0530", "章丘");
																				
		//长度
		System.out.println("长度"+m1.size());
		//获取数据
		System.out.println(m1.get("0531"));//如果key重复,新的value覆盖旧的value。
		System.out.println(m1.get("0530"));	
		//移除
		m1.remove("0530");
		System.out.println(m1.get("0530"));
		//判断key的一个内容是否存在
		System.out.println(m1.containsKey("0533"));
		//判断value的一个内容是否存在
		System.out.println(m1.containsValue("淄博"));
		
		//遍历,通过遍历key顺便得到value,从而得到整个集合
		for(String k:m1.keySet())
		{
			System.out.println("key="+k+"value"+m1.get(k));
		}
		//key可以为空
		
		
		//TreeMap
		TreeMap<Integer, person> tm=new TreeMap<>();
		tm.put(100, new person("X","20"));
		tm.put(500, new person("S","20"));
		tm.put(10, new person("XD","20"));
		tm.put(300, new person("GF","20"));
		//遍历
		for(Integer a:tm.keySet())
		{
			System.out.println(a+m1.get(a));
		}
		//key不可以为空null,通过key对键值对进行排序的集合
	}
}

  

package jiheke1;
                                                   //泛型
    
import java.util.ArrayList; 

import java.util.List;
public class fanxing {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//没有泛型——————类型不安全,使用时需要强制转型,使用不方便
		List ls=new ArrayList();
		ls.add(new person("x","20"));
		ls.add("zxc");
		ls.add(123);
		person p0=(person)ls.get(0);//在强制转成person型
		System.out.println(p0);
		
		
		//泛型——————类型安全,编译时能确定具体类型,不需要强制转换类型,使用方便
		List<person> lp=new ArrayList<>();
		lp.add(new person("y","20"));
		person p2=lp.get(0);
		System.out.println();
	}
	

}
                      




							//泛型课件
package jiheke1;

class fanxing2<T> {//泛型名称可以多个eg:<T,F,M>

//	//泛型————在类名和{之间写入<>,在<>中写泛型的名称用字母代替,如:3行
	//使用泛型
	public T getT(T t)
	{
		return t;
	}
	
	//泛型方法——在普通类中一样可以使用泛型方法
	public <E> void test(E e)//E泛型类型标识符
	{
		System.out.println(e);
	}
	
}



package jiheke1;

public class fanxing2test {

	public static void main(String[] args) {
		

		//泛型		
		fanxing2<person> f1=new fanxing2<>();
		person p1=f1.getT(new person("s","123"));
		System.out.println(p1);
		
		//调用test方法
		f1.test(123);
	}

}