• 使用集合组织相关数据


    集合:某些对象集中在一起就是集合。就是怎么easy!

    1.ArrayList可以动态扩容,并且它的索引会 根据程序的扩展而重新进行分配和调整。被删除的对象,索引也并不会占位,这是区别于数组的两点。默认初始容量为0.ArrayList类属于System.Collection空间,包含接口和类。

     ArrayList提供了一系列方法对其中的元素进行访问,增加和删除操作。

    ArrayList常用属性和方法:

    Add(Object value)将对象添加到ArrayList的结尾处。并且返回值 为int。

    Remove(Object value)将指定的元素删除,并且一次只删除一个。

    RemoveAt(int index)将指定元素下标的值删除。

    Insert(int index,Object Value)将指定的元素添加到指定的下标。

    Contains(Object Value)判断指定的元素是否存在集合中,布尔返回值。

    Clear()删除集合中的所有元素

    属性:

    Count:查询集合中的元素个数。

    集合初始化器:就是更简单的方法对集合中的元素赋值。

    eg:

    ArrayList list = new ArrayList();

    {

     new Book(){BookName="越狱"}//每一项用逗号隔开,最后一项不用逗号

    ...

    };

    可以使用For循环和Foreach循环遍历集合。

     经验:集合的难点不在于方法的使用,而在于综合使用解决项目中的实际问题。

     2.Hashtable的使用

    Hashtable不能通过下标访问数据,双列集合是通过键访问值的。

    Hashtable的常用属性和方法

    Count   :获取键值对的数目

    keys:键的集合

    Values:值的集合

    Add(Object key,Object Value):将指定的键和值的元素添加到集合中。

    Remove(Object Key):移除带有指定键的元素

    Clear():移除所有元素

    eg: Hashtable ht = new Hashtable();

    SE jack = new SE();

    jack.Name="lai ";

    jack.Age = 35;

    ...........

    jack.ID = "001";

    //向Hashtable中添加元素

    ht.Add(jack.ID,jack);

    Hashtable只能用foreach遍历集合中的数据。

    eg:

    foreach(Object obj in ht.Values)

    {

    //遍历值

    cw(se.Name);

    }

    或者

    foreach(string key in ht.Keys

    {

    //将键值对全部遍历出来

    cw(ht[key]);

    }

     3.泛型集合

     泛型是C#2.0的一个新特性。泛型引入一个概念:类型参数。是一个数据类型,可以是类类型,基本数据类型。通过使用<T>类型参数

     1.减少装箱和类型强转时的风险。

    2.通过泛型可以最大限度的重用代码,保护类型的安全及提高性能,最常用的就是创建集合类,可以约束集合类中的元素类型。比较典型的是List<T>和Dictionary<K,V>.

    定义一个List<T>泛型集合的方法

    语法:

    List<T> 对象名 = new List<T>();//泛型集合必须实例化

    eg:

    //通过索引访问

    SE se = new se[0];

    se.SayHi();

    //通过索引或者对象删除

    ses.RemoveAt(0);

    ses.Remove(ema);

    //打印集合数目

    ses.Count.Tostring();

    //遍历。for也可

    foreach(SE se in ses)

    {

    //遍历时无须类型转换

    cw(se.SayHi());

    }

    4.List<T>与ArrayList的区别

     相同点:

    1.通过索引访问集合中的元素。

    2.添加元素方法相同。Add(Object Value)

     3.删除元素方法相同。RemoveAt(int index)或Remove(Object Value)

    不同点:

    List<T>:对保存元素进行类型约束。

    ArrayList:可以增加任何类型。

    List<T>:添加/读取值类型不用进行装箱,拆箱操作。

    ArrayList:添加/读取值类型需要进行装箱,拆箱操作。

    <泛型集合Dictionary<K,V>>

    它具有泛型的全部特性,编译时检查类型约束,获取元素值时无须类型转换。它存储数据的方式与Hashtable类似,也是通过Key.Value键值对保存元素的。

    语法:

    Dictionary<k,v>  对象名 = new Dictionary<k,v>();//定义泛型集合必须实例化

    eg:

    Dictionary<string,SE> ht = new Dictionary<string,SE>();

    ht集合的Key类型是string ,Value是SE类型

    SE jack = new SE();

    jack,Name="我";

    jack.ID = "1";

    SE joe = new SE();

    joe.Name ="张三";

    ......

    ht.Add(jack.ID,jack);//添加元素

    。。。

    //打印集合元素

    ht.Count.Tostring();

    //通过Key访问元素

    SE ht = ht["1"];

    //通过key删除元素

    ht.Remove(“1”);

    //遍历只能用for,因为双列集合无索引,并且是无序的。

    foreach(SE se  in ht.Values

    {

    cw(se.SayHi());//遍历无须类型转换

    }

    5.Dictionary<k.v>和Hashtable的对比

    相同点:

    1.都通过Key获取Value

    2.添加元素方法相同Add(Object Key,Object Value)

    3.删除元素方法相同 Remove(Object Value)

    4.遍历方法相同foreach

    不同点:

    Dictionary<k.v>:对保存元素进行类型约束。

     Hashtable:可以增加任何类型

    Dictionary<k.v>:添加/读取值类型元素无须装箱,拆箱。

     Hashtable::添加/读取值类型元素需要拆箱,装箱。

     遍历Dictionary还可以采用:

    foreach(KeyValuePair<string,SE> en in ht)

    {

    cw(en.Key);

    cw(en.Value.Name);

    }.

    6.泛型类(重点)

    语法:

    public class 类名<T>

    {

    //...

    }

    T代表数据类型。可以是基本数据类型,类类型。

    泛型类相当于 一个口袋,它支持任意的数据类型,这种数据类型在程序运行时确定。

    泛型优点:

    1.性能高。普通集合的数据需要装箱和拆箱的操作,而泛型无须类型的转换操作。

    2.类型安全。泛型结婚对它存储的对象进行类型的约束,不是它所允许存储类型是无法添加到泛型集合中的。

    3.实现代码的重用。泛型就相当于模板,由于它支持任意的数据类型。开发人员不必为每种特定的数据类型编写一套方法。所以它具有极大的可重用性。泛型编程是未来的主流技术之一。

     

    列子1:
    public class Point<T> {
        private T x;
        private T y;
        public T getX() {
            return x;
        }
        public void setX(T x) {
            this.x = x;
        }
        public T getY() {
            return y;
        }
        public void setY(T y) {
            this.y = y;
        }
        @Override
        public String toString() {
            return "Point [x=" + x + ", y=" + y + "]";
        } 
     
         public static void main(String[] args) {
            Point<Integer> p=new Point<Integer>();
            p.setX(12);
            p.setY(11);
            System.out.println(p.toString());
            
            Point<String> p1=new Point<String>();
            p1.setX("gao");
            p1.setY("ying");
            System.out.println(p1.toString());
        }  
    }  

    例子2:
    public class MyMap<K,V> {
     
        private K key;
        private V value;
        public K getKey() {
            return key;
        }
        public void setKey(K key) {
            this.key = key;
        }
        public V getValue() {
            return value;
        }
        public void setValue(V value) {
            this.value = value;
        }
        
        public void put(K key,V value){
            this.key=key;
            this.value=value;
        }
        @Override
        public String toString() {
            return "MyMap [key=" + key + ", value=" + value + "]";
        }
     
       //测试
        public static void main(String[] args) {    
               MyMap<Integer,String> mp=new MyMap<Integer,String>();
               mp.put(1, "aa");
               System.out.println(mp.toString());  
        }
    }
     
    泛型方法
     
    public class  myArray {
     
        public static void main(String[] args) {
            //Test(1,2,4);
            //Test2("aa",2,"cc",true);
            Test3(2,4,5,"a",true);
        }
        
        public static  void Test(int ...i)  {
            for (int j = 0; j < i.length; j++) {
                System.out.print(i[j]+" ");
            }
        }
        
        @SafeVarargs
        public static  <T> void Test2(T ...i)  {
            for (int j = 0; j < i.length; j++) {
                System.out.print(i[j]+" ");
            }
        }
     
        
        public static  void Test3(Object...i)  {
            for (int j = 0; j < i.length; j++) {
                System.out.print(i[j]+" ");
            }
        }
    }
  • 相关阅读:
    ASP.NET学习笔记之VS操作使用技巧
    无线干扰的防止和消减要领总结
    小米蝈蝈 vs 巍
    struts2学习笔记一struts2标签学习
    魏飞
    Hibernate+Mysql在向数据库中保存 / 更新数据时设置编码格式
    程序员爱情 猿女友们,很幸福吗???
    人生
    外链?存储?这个好不好用,fileupyours,fileden,skydrive
    实现网页中增加刷新按钮、链接的方法 搜集
  • 原文地址:https://www.cnblogs.com/java-123/p/8694665.html
Copyright © 2020-2023  润新知