zoukankan      html  css  js  c++  java
  • Java中泛型的运用实例

    package example6;

    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.HashSet;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    import java.util.Map.Entry;
    import java.util.Set;

    import org.junit.Test;


    /*1.为什么要使用泛型?
     * 一般使用在集合上,比如现在将一个字符串类型放在集合里面,这时候,放入集合的字符会失去其本身的类型,只能是object类型,比如想要对这这个值进行转换,
     * 很容易出现类型转换错误。可以使用泛型解决这个问题。
     * 常用集合:list set map
     * list的三种实现(ArrayList  LinkedList   vector)
     * 此三者的区别:
     * 1.这三个类都实现了List接口,LinkList即存储在这两个集合中的元素的位置是不连续的,底层数据结构是列表结构。
     * 2.ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,查询速度快,
     * 但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢。
     * 3.LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入,修改,删除 速度较快.
     * 4.Vector是同步处理,性能较低;ArrayList是使用异步处理,性能高。
     * 5.Vector是线程安全的,ArrayList是非线程安全。LinkedList是非线程安全。
     * 6.一般情况都用ArrayList,ArrayList占据内存小,如果只是查找特定位置的元素或只在集合的末端增加、移除元素,那么使用Vector或ArrayList都可以。
     * 如果是对其它指定位置的插入、删除操作,最好选择LinkedList。
     * 7.泛型擦除
     * 首先泛型只是出现在源代码阶段,当编译之后泛型不存在了。
     * 注:在泛型里必须写一个对象,比如String,不能写基本数据类型,比如int。
     * 要写基本数据类型对应的包装类
     * byte---Byte
     * int---Integer
     * short---Short
     * loong---Long
     * float---Float
     * double---Double
     * boolean---Boolean
     * char---character
     * */

    public class fanxing {

    //将一个任意数组进行首尾颠倒
        public static void main(String[] args) {
            String[] array= {"sss","ddd","xxx","bbb","mmm","ccc"};
            System.out.println(Arrays.toString(array));
            reverses(array);
            System.out.println(Arrays.toString(array));
            
            Integer[] array1= {11,22,33,44,55,66};
            System.out.println(Arrays.toString(array1));
            reverses(array1);
            System.out.println(Arrays.toString(array1));
        }
        
        
        
        private static<T> void reverses(T[] array) {
            for(int i=0;i<array.length/2;i++) {
                T temp=array[i];
                array[i]=array[array.length-i-1];
                array[array.length-i-1]=temp;
            }
            /*private static void reverses(String[] array) {
                for(int i=0;i<array.length/2;i++) {
                    String temp=array[i];
                    array[i]=array[array.length-i-1];
                    array[array.length-i-1]=temp;
                }*/
            
        }



        // 泛型使用在set集合上
        @Test
        public void setList() {
            Set<String> set = new HashSet<String>();
            set.add("baojuan");
            set.add("xinxin");
            set.add("xuanxuan");
            // 遍历set集合只有两种方式(迭代器,增强for)
            for (String s1 : set) {
                System.out.println(s1);
            }
            // 迭代器
            Iterator<String> it = set.iterator();
            while (it.hasNext()) {
                System.out.println(it.next());
            }
            System.out.println("********************************");
        }

        // 泛型在map集合上的使用(结构:key--value形式)
        @Test
        public void testMap() {
            Map<String, String> map = new HashMap<String, String>();
            map.put("www", "111");
            map.put("qqq", "222");
            map.put("ttt", "333");
            // 遍历map集合(有两种方式)
            // 1.获取所有的key,通过key得到value,用get方法
            // 2.获取key和value的关系
            // 使用第一种方式遍历
            Set<String> sets = map.keySet();
            // 遍历所有key返回的set
            for (String key : sets) {
                // 得到所有key对应的value值
                String value = map.get(key);
                // 打印输出
                System.out.println(key + "=>" + value);
            }

            // 第二种方式遍历
            //set集合存放通过map.entrySet()方法获得的key与value的关系
            Set<Entry<String, String>> set1 = map.entrySet();
            //遍历关系集合
            for (Entry<String, String> entry : set1) {
                //获取关系中的key值
                String s1 = entry.getKey();
                //获取关系中的value值
                String s2 = entry.getValue();
                System.out.println(s1+"=>"+s2);
            }

        }

        // 泛型在list集合上的使用
        @Test
        public void testList() {
            List<String> list = new ArrayList<String>();
            list.add("aaaa");
            list.add("bbbb");
            list.add("cccc");
            // 遍历list集合
            // 普通for循环,迭代器,增强for循环(三种方式)
            for (int i = 0; i < list.size(); i++) {
                String s = list.get(i);
                System.out.println(s);
            }
            System.out.println("===========================");
            // 增强for循环
            for (String s1 : list) {
                System.out.println(s1);
            }
            System.out.println("===========================");
            // 使用迭代器遍历集合
            Iterator<String> it = list.iterator();
            while (it.hasNext()) {
                System.out.println(it.next());
            }
            System.out.println("********************************");
        }
    }

    运行结果:

    qqq=>222
    ttt=>333
    www=>111
    qqq=>222
    ttt=>333
    www=>111
    aaaa
    bbbb
    cccc
    ===========================
    aaaa
    bbbb
    cccc
    ===========================
    aaaa
    bbbb
    cccc
    ********************************
    xinxin
    xuanxuan
    baojuan
    xinxin
    xuanxuan
    baojuan
    ********************************

  • 相关阅读:
    洛谷 [P1024]一元三次方程求解
    洛谷 [P1426] 通往奥格瑞玛的道路
    洛谷 [p1439] 最长公共子序列 (NlogN)
    洛谷 [P1182] 数列分段
    洛谷 [P1314] 聪明的质检员(NOIP2011 D2T2)
    洛谷 [P1280] 尼克的任务
    洛谷 [P1801] 黑匣子
    洛谷 [p1196] 银河英雄传说
    洛谷 [P2024] 食物链
    洛谷 [P1198] 最大数
  • 原文地址:https://www.cnblogs.com/aasu/p/9189404.html
Copyright © 2011-2022 走看看