java之集合基础

一、、为何使用类集框架?
java中有对象,对象需要存放,要进行读取,要传递。起先通过数组,对象数组来传递,但是数组有很大的弊端不能存放动态的东西,就是说很多对象的多少不是固定不变的。所以用链表来存放。但是链表开发难度大;性能低下;所以java1.2的时候就开发了类集框架,方便开发者的使用,起初是用所有类集框架都是用object作为返回值,需要使用向下转型,会带来安全隐患。1.5提出泛型。故现在类集中都用泛型,有些地方不用会提示警告。

二、借此机会,再一次了解转型的意义?
    向上转型: 统一参数; 代码更简洁
    统一参数:是说在调用被覆写的方法时,用到的参数为父类对象,而不再是每个子类的对象。

    转型首先是建立在继承和重载/覆写的基础上的。

example:  

		example:  
			class Car{
      			run() {
      				System.out.println("父类的run()");
      			}
            }
			class Bmw extends Car{
				run(){宝马的run}
			}
			class  dazhong extends Car() {
				 run(){大众的run}
			}
			//这是用向上转型实现
			main{
				show(Car  car){
					car.run();
				}		
				show(new bmw);//相当于 car  =bmw;
				show(new dahong);	
			}
			//如果不用呢?
			main {
				show(new Bmw);
				show(new dazhong);
			}
			show(dazhong) {
				dazhong.run();
				dazhong1.其他方法
			}
			show(bmw){
				bmw.run();
			}
			//如果有n个子类,那将需要给每个子类写一个 对象.方法 的方法。代码会很不简洁。
    向下转型:执行子类的个性化方法。
    向上转之后,父类只能访问覆写过的方法,父类不能访问到子类中其他的方法,为了解决这个问题。


三、再回顾下集合中的精华。
    一、单对象最大的接口  
    Collection<E> 
            较为重要方法 add()   iterator:实例化它的父类iterator
            它的子接口有俩个。为List,  Set
    List子接口 :对象可以重复。
        1.子类:ArrayList  数组实现,查找快,插入,删除慢
            扩充的方法  get(index);  set(index, element);  listIterator();
            扩充的方法主要是方便读取写入单个的元素。次要的是为了实现了迭代的子接口。lsitIterator()是Iterator的子接口。那么就可以在list对象中直接创建迭代器了,用hasNext()来判断

        2.LinkedList子类: 用链表实现,查找慢,插入,删除快 。双向链表。
        3.Vector子类:出现比较早,采用线程同步,比较安全。用的不多。也是数组实现。

    Set子接口:元素不能重复
    并没有对父接口进行扩充,简单的继承。当然也无法使用get()之类
    常用的子类:HashSet,TreeSet
        HashSet子类:散列存放
        Hash算法:用二进制计算结果来设置保存位置,当然无序,但是查找比较快。

    TreeSet子类:进行排序
    要和比较器 compareTo结合使用。用法就是,实体类需要继承compareTo,
    这里关于 重复元素的消除,和比较规则,我还会再操作中写到具体代码操作。

    二、双对象的接口Map
        HashMap子类

            数据格式为:key-value。类的类型解雇为 <map,entry>

            特别的是,这俩部分都是一个集合,可以分别取得。得转换为iterator对象才能分别以list输出。

            它们允许同时为null
            常用方法:Put(key,value);  如果key值重复,值会替代
            get(key)
            Set<> entrySet():将map转换为set集合,主要用来迭代Map,很必须
            Set< > keySet(): 取出全部的key
            Hashtable子类   用的不多。采用线程同步,不允许key-value为null


集合的特点说完了
四、下来是集合的输入操作:
        单对象的输出
        有4中操作: Iterator.class  ListIterator,  foreach.  Enumeration. 我只用过for?  enum连见都没见过。。
    1。Iterator
              Collection可是继承了Iterator接口的,我去,接口中就一个方法Iterator(),
                这个方法最火!用法:集合名.hasNext()?next():null;
    2。ListIterator
        一看就是人家的子接口
        它可以向前迭代。提供了hasPrevious().和previous() 意思是 : 有没有?取出来

   3. for简单
        for(String string :listname) {
            System.out.println(string);
        }

    4. Enumeration枚举输出。太不重要了,不管了。

双对象集合的输出:也是迭代输出

        

public class IteratorMap {

	public IteratorMap() {
		// TODO Auto-generated constructor stub
	}	
	public static void main(String[] args) {
		Map <String ,Integer>map=new Hashtable<String ,Integer>();
		map.put("书",20);
		map.put("电脑",100);
		map.put("床",24);
		//Map的类结构为<Map,Entry>
		//map转换为同类型的set
		Set<Map.Entry<String, Integer>> set=map.entrySet();
		//set转圜为iterator接口实例
		Iterator<Map.Entry<String, Integer>> iterator=set.iterator();
		//取得迭代内容
		while(iterator.hasNext()) {
			Map.Entry<String, Integer>  mEntry=iterator.next();
			System.out.println(mEntry.getKey()+mEntry.getValue());
		}
	}
}
集合面试分析:
1. 数组Array和集合ArrayList区别? 长度固定不固定问题;
2. Collection是用来输出的,而map是用来查询的?
hashMap集合采用了hash算法,查询速度快。我还要了解下hash实现,还不会。 

猜你喜欢

转载自blog.csdn.net/qq_35758236/article/details/80866935