Collection

知识点:

collection:只能存储引用类型(无序不可重复)

ArrayList:底层是数组(有下标),所以ArrayList有很多数组的特性(add(index,e),看底层文档发现,默认容量为10,扩增是1.5倍

如何优化ArrayList和Vector:尽量减少扩容操作,在创建时,指定初始化容量

HashMap:底层是哈希表(散列表)即数组和单向链表的组合,所以增删、查询效率高

每个单向链表都是一个独一无二的hash值,代表数组的下标,在某个单向链表的每一个节点上的hash值是相等的,hash值实际是key调用hashcode方法,再通过“hashfunction”转化成相应的值

如何向哈希表中添加元素:先调存储的key的hashcode方法得到hash值,若在这个哈希表中不存在这个hash值,则加入,存在的话,继续调用key之间的equals方法,为true,则放弃,反之,则加

SortSet存储元素为啥会自动排序,因为被存储元素实现compareable接口,sun调用编写的treeSet集合在添加元素的时候,会调用compare,不是每个都能完成自动排序,比如Person()就不行,无法比较,而像Integer,Date啥的可以


import java.util.*

public class Arratlist01 {
    public static void main(String[] args) {

        List<String> li = new ArrayList<String>();// 如果泛型(String)不加,在foreach是不行的
        li.add("nishenping");
        li.add("nishenping");
        li.add("nishenping");
        li.add("nishenping");
        // for/foreach/iterator3种方法,但是set(无序不可重复)不可以用for,没有下标哦,
        for (String s : li) {
            System.out.println(s);
        }
        System.out.println("----------------");
        // 题目如何除去一个集合中的重复的数

        // hashset中添加查询删除都比较块,就是无序,所以把数据放进来就可以保证无序
        Set<String> li2 = new HashSet<String>();
        // 添加所有的li中数据addAll
        li2.addAll(li);
        for (String s1 : li2) {
            System.out.println(s1);
        }
        String s2 = "woshizhong人";
        char s3 = s2.charAt(s2.length() - 1);
        System.out.println(s3);
        

    }

}
____________________________________________________________________________________________________________
import java.io.UnsupportedEncodingException;
import java.util.*

public class HashMap01 {
    public static void main(String[] args) {
        
        Map<Integer,String> m=new HashMap<Integer,String>();
        m.put(1, "nishenping");
        m.put(2, "魏华");
        m.put(3, "倪娟");
        m.put(1, "胡母");
        String s=m.get(2);//魏华、不是从0开始的
        
        int i=m.size();
        System.out.println(i);
        // Set<K>- keySet()   返回键      
        Set<Integer> s1=m.keySet();
        for(Integer ss:s1) {
            System.out.println(ss);
        }
            //Collection<V> -values(),返回值  
        Collection<String> c1 = m.values();
        for(String sss:c1) {
            System.out.println(sss);
        }
        // Set<Map.Entry<K,V>>- entrySet()返回键和值
        Set<Entry<Integer, String>> es = m.entrySet();
        for(Entry<Integer, String> ess:es) {
            System.out.println(ess);
        }
        String s2="ahon工厂阿当";
        byte[] b=s2.getBytes();
        for(Byte b1:b) {
            System.out.println(b1);
        }
        String s3="abcde这是中文的";
        String str;
        try {
            byte[] b1=s3.getBytes("gbk");
            System.out.println(b1);
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
//        try {
//            str = new String(s3.getBytes("gbk"));//这个乱码转化问题还是不懂?????????????
//            System.out.println(str);
//        } catch (UnsupportedEncodingException e) {
//            // TODO Auto-generated catch block
//            e.printStackTrace();
//        }

    }

______________________________________________________________________________________________________________________________练习:1
import java.util.*

public class demo01 {
    
//第一题:要求产生10个随机的字符串,每一个字符串互相不重复,每一个字符串中组成的字符(a-zA-Z0-9)也不相同,每个字符串长度为10;
    public static void main(String[] args) {
         String s="1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWSYZ";
         Random r=new Random();//随机数的
         //需要打印10个字符即循环10次
         Set<String> ss=new LinkedHashSet<String>();//存放字符串的
         while(true) {//循环10次就结束
                 Set<Character> s1=new LinkedHashSet<Character>();// 每次new的时候里面的会自动清空
                 while(true) {
                     int i2=r.nextInt(62);//产生随机下标
                     char c=s.charAt(i2);//生成随机字符
                     s1.add(c);//添加到Set集合
                     if(s1.size()==10) {
                         break;//产生10个就终止
                     }
                 }
         String s3="";
         for(char c1:s1) {
             s3+=c1;//这是干嘛的??????
         }
            ss.add(s3);
            if(ss.size()==10) {
                break;
                }
            }
         for(String sss:ss) {
             System.out.println(sss);
         }
        }
       

  }

练习:2

//第二题:有16个足球队,分别随机产生4组不重复的球队

package com.huashen.work;

import java.util.*

public class Demo04 {
    public static void main(String[] args) {
         String s= "特,根,大,不,兰,亚,本,下,中国,北,西,时,国,隆,斯,利";
         String[] s1=s.split(",");
         List<String> l=Arrays.asList(s1);
        ArrayList<String> al=new  ArrayList<String>(l);
         for(int i=1;i<=16;i++) {
             int index=(int) (Math.random()*al.size());
             System.out.print(al.get(index)+",");
             al.remove(index);
             if(al.size()%4==0) {
                 System.out.println();
             }
             }
         }

    }

练习:3

购物车案例不会??????????????










阅读更多

没有更多推荐了,返回首页