数据结构之集合框架

    数据结构是数据及其相互之间的联系(逻辑关系),通常概括为集合结构,线性结构,树形结构,图型结构。

   通常采用二元组表示:B=(K,R),B为一种数据结构,它由数据元素的集合K和K上二元关系的集合R所组成。当中:

                                      K={ki|i>=1&&i<=n,n>=0}

                                      R={rj|j>=1&&j<=m,m>=0}

ki(rj)为集合K(R)中的第i(j)个数据元素,n(m)为K(R)中数据元素的个数,

    集合结构:当n!=0,m=0时数据结构为集合结构,此时数据结构中只存在元素的集合,不存在有关系的集合。

    线性结构:元素间存在一对一的关系称为线性结构。常见类型:数组,队列,链表,栈。

    树形结构:元素间存在一对多的关系称为树形结构。常见类型:树(如:哈夫曼树)

    图形结构:元素间存在多对多的关系称为图形结构。

这里先讲一下集合框架

常用的集合有三种:

 1.Set(集合),特点为无序,不可重复,继承了Collection接口。

   Set接口常用的子类:HashSet ,TreeSet

   以HashSet为例

public void testSet(){
		HashSet<String> set = new HashSet<String>();
                //添加数据
		for(int i=0; i < 10; i++){
			String s = "str"+i;
			set.add(s);
		}
		
		//遍历,打印数据
		Iterator<String> it = set.iterator();
		while(it.hasNext()){
			//取下一个数据
			String str = it.next();
			System.out.println(str);
		}
		
		//迭代循环for遍历
		for(String s : set){
			System.out.println(s);
		}
		
		set.remove("");//删除数据
		set.contains("");//判断制定元素是否存在
		set.clear();//清空数据
		set.isEmpty();//若集合为空返回true
			
}

 

 2.List(列表:数组和向量,链表,堆栈,队列),特点为可重复,其对象以线性   方式存储,无特定顺序,只有一个开头和一个结尾,继承了Collection接口。

  List接口常用的子类:ArrayList、LinkedList、Vector 

    以ArrayList为例

public void testList(){
		//创建一个数组队列,泛型
		ArrayList<String> list = new ArrayList<String>();
		
		//往队列中添加10个字符串数据
		for(int i=0; i<10; i++){
			list.add("str"+i);
		}
		
		//删除一条数据并且返回被删除的数据
		String s = list.remove(5);
		System.out.println("被删除的数据:"+s);
		
		list.add(2, "添加到第二个");
		//查找,返回被查找的数据对应的位置
		int pos = list.indexOf("str3");
		System.out.println("查找结果:"+pos);

        	//替换
		list.set(1, "1111");
	
		//遍历打印
		for(int i=0; i<list.size(); i++){
			String str = list.get(i);
			System.out.println(str);
		}
		//也可用
		for(String ss : list){
			System.out.println(ss);
		}
}

 

 3.Map(映射),存放两个对象,key与value,二者一一对应。

   Map接口常用的子类:HashMap,HashTable,TreeMap

   以HashaMap为例

   

public void testMap(){
		HashMap<String, String> map = new HashMap<String, String>();
		
		//存放,value可相同
		map.put("111", "张三");
		map.put("222", "李四");
		map.put("111", "王五");
		
		//删除key对应的数据,并且返回对应的value
		map.remove("111");
		
		//根据key值查找value
		String name = map.get("222");
		System.out.println(name);
		
		//遍历方法1,相同的value都可以打印
		Set<String> keySet = map.keySet();
		for(String key : keySet){
			System.out.println("key="+key);
			System.out.println("value="+map.get(key));
		}
		//遍历方法2,相同的value都可以打印
		Set<Entry<String,String>> entrySet = map.entrySet();
		for(Entry<String,String> entry : entrySet){
			System.out.println("key="+entry.getKey());
			System.out.println("value="+entry.getValue());
		}
		//遍历方法3,只打印相同value的最后一个
		Collection<String> values = map.values();
		for(String value : values){
			System.out.println("value="+value);
		}
}

 

 

  

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值