javaSE(集合方面的知识List,Set)

数组和集合的区别

一、数组声明了它容纳的元素的类型,而集合不声明。

二、数组是静态的,一个数组实例具有固定的大小,一旦创建了就无法改变容量了。而集合是可以动态扩展容量,可以根据需要动态改变大小,集合提供更多的成员方法,能满足更多的需求。

三、数组的存放的类型只能是一种(基本类型/引用类型),集合存放的类型可以不是一种(不加泛型时添加的类型是Object)。

四、数组是java语言中内置的数据类型,是线性排列的,执行效率或者类型检查都是最快的.

Arrays.toString:输出String数组的所有值

重写toString() 只会对类生效,并不能字符串生效 (要重写他的方法才会有用)

集合框架
Collection

List和Set
在实际开发中,需要将使用的对象存储于特定的数据结构的容器中,JDK提供了这样的容器----集合(Collection)

Collection是一个接口,定义了集合相关的各种操作方法
其有两个子接口:List和Set
List 可重复集合
Set 不可重复集合

元素是否重复,取决于元素的equals()比较结果.
集合持有对象的引用
集合中存储都是引用数据类型,并且集合只保存每个元素对象的引用,而并非将元素对象本身存入集合

//创建集合,证明持有的只是对象的引用
        Collection<Cell> cells = new ArrayList<Cell>();
        cells.add(new Cell("1","2"));
        cells.add(new Cell("1","2"));
        Cell a = new Cell("2","3");
        cells.add(a);
        System.out.println(a);
        System.out.println(cells);
        a.drop();
        System.out.println(cells);

addAll,ContainsAll
boolean  addAll(Collection<?extends E> c)
该方法需要我们传入一个集合,并将该集合中的所有集合添加到当前集合中.

boolean  containsAll(Collection<?> c)
该方法用于判断当前集合是否包含给定集合中的所有元素,诺包含则返回true.

//测试addAll方法和containsAll方法
        Collection<String> strCol = new ArrayList<String>();
        strCol.add("java");
        strCol.add("php");
        strCol.add("c++");
        strCol.add("c#");
        System.out.println(strCol);
        
        Collection<String> c = new HashSet<String>();
        c.add("it");
        c.add("blue");
        strCol.addAll(c);
        System.out.println(strCol);
        
        Collection<String> strCol2 = new ArrayList<String>();
        strCol2.add("java");
        System.out.println(strCol.containsAll(strCol2));

hashNext,next方法
迭代器用于遍历集合元素,获取迭代器可以使用Collection定义的方法
Iterator   iterator();
迭代器Iterator 是一个接口,集合在重写了Collection的iteration方法利用内部类提供了迭代器的实现.
Iterator 提供了统一的遍历集合元素的方式,其提供了用户遍历集合的两个方法

Boolean  hasNext():判断集合是否还有元素可以遍历
next():返回迭代的下一个元素
Collection<String> strCol = new ArrayList<String>();
        
        strCol.add("java");
        strCol.add("php");
        strCol.add("c++");
        strCol.add("c#");
        
        Iterator<String> iterator = strCol.iterator();//集合的方法
        while(iterator.hasNext()){//判断是否还有元素遍历
           String str =    iterator.next();
           System.out.println(str);
 
remove方法
void remove();
在使用迭代器遍历集合时,不能通过集合的remove方法删除集合元素,否则会抛出异常
我们可以通过迭代器自身提供的remove()方法来删除通过next()方法迭代出的元素
迭代器的删除方法是源集合中删除元素
在调用迭代器的remove()方法前必须通过迭代器的next()方法迭代过元素,那么删除的就是这个元素,
并且不能再次调用remove()方法,除非调用next()方法可再次调用

//练习:删除包含c字母的元素
Collection<String> strCol = new ArrayList<String>();

        strCol.add("java");
        strCol.add("php");
        strCol.add("c++");
        strCol.add("c#");
        //通过迭代器的方式删除包含字母c的元素
        Iterator<String> iterator = strCol.iterator();
        while (iterator.hasNext()) {
            String str = iterator.next();
            if (str.indexOf("c") != -1) {//找不到这个元素为-1
                iterator.remove();
            }
        }
        System.out.println(strCol);//刪除的是源集合元素
    }
    
以下會有異常
Iterator<String> iterator = strCol.iterator();
        while (iterator.hasNext()) {
            String str = iterator.next();
            strCol.remove("php");
            if (str.indexOf("c") != -1) {//找不到这个元素为1    
            }
        }    
    //java.util.ConcurrentModificationException
    
for加強型循环
for(元素类型 e:集合或数组){}    
for(String e:strCol){System.out.println(e)}    
    
get和set方法
List除了基础Collection定义的方法外,还根据其线性表的数据结果定义一系列的方法
其中最常用的就是基于下标的get和set方法
语法
E get(int index)    
获取集合中指定下标对应的元素,下标从0开始

E set(int index,E element)
将给定的元素存入给定位置,并将原位置的元素返回.

List<String> list = new ArrayList<String>();
        list.add("DACAa");
        list.add("java");
        list.add("111");
        list.add("333");
        list.add("444");
        System.out.println(list);//已经调用了toString方法
        for(int i =0;i<list.size();i++){
            System.out.println(list.get(i).toUpperCase());
        }
        //String value = list.set(1, "c++");//替换掉的会输出出来
        System.out.println(list);
        //System.out.println(value);
        list.set(1, list.set(3, list.get(1)));
        System.out.println(list);

如何增加oracle中的查询效率
增加索引
使用with结构化语句
使用缓存
    
使用List 的 set()方法和get()方法设置和获取集合中的元素    
1.创建集合并初始化
2.使用List接口提供的set和get方法遍历List集合,并将每一个字符串元素转换成大写
3.将    索引位置的1 的元素替换成c++,并输出被替换的元素以及List
交换集合List中的索引位置为1和索引位置为3的元素
    
插入和删除
void add(int index,E element)
将给定的元素插入到指定的位置,原位置以及后续的元素都顺序向后移动

E remove(int index)
删除给定位置的元素,并将被删除的元素返回

subList:
List的subList方法用于获取子List
ps:subList获取子List和原List具有相同的存储空间.对子List操作会影响原List.

语法:
List<E>subList(int formIndexm,int toIndex).
formIndexm和toIndex是截取自List的首尾下标(左闭右开)

List<Integer> list = new ArrayList<Integer>();
        for(int i =0;i<10;i++){
            list.add(i);
        }
        System.out.println(list);
        List<Integer> subList = list.subList(3, 8);
        System.out.println(subList);

//    subList.size() == list.size();  size 返回元素个数
//  虽然subList和List拥有相同的存储空间,但是size()方法只是返回集合中元素个数,不是返回存储空间大小    

clear()方法用于清除元素    ,表示全量清除
List<Integer> list = new ArrayList<Integer>();
        for(int i =0;i<10;i++){
            list.add(i);
        }
        System.out.println(list);
        list.subList(3, 8).clear();
        System.out.println(list);    
    
List转换数组
List的toArray方法用于将集合转换为数组,但实际上该方法定义在Collection中定义的所有的集合都具备这个功能
其有两个方法
Object[]  toArray
<T> T[] toArray(T[] a)
String[] ll = list.toArray(new String[4]);
该方法是比较常用,我们可以传入一个指定的类型的数组,该数组的元素类型应该与集合的元素类型一致,返回则
是转换后的数组,该数组

数组转化为集合.
Arrays类中提供了一个静态方法asList,使用该方法我们就可以将一个数组转化为集合
static <T>list<T> asList<T>
对于返回的集合我们不能对其增加或删除元素,否则会抛出异常,并且对集合的元素进行修改会影响数组对于的元素.
    
List排序
Collections.sort方法实现排序
Collection是集合工具类,他提供很多便于操作集合的方法,其中就有用于排序的sort方法
语法:
void sort(List<T> list)

List<Integer> list = new ArrayList<Integer>();
        Random ran = new Random();
        for(int i =0;i<10;i++){
            list.add(ran.nextInt(100));
        }
        System.out.println(list);
        Collections.sort(list);
        System.out.println(list);

Collections的sort方法    是对集合元素进行自然排序,那么对元素之间一定要有大小之分,那么这个大小之分如何鉴定
实际上,在使用Collections的sort方法排序的集合元素都必须是Comparable接口的实现类,
该接口表示其子类是可比较的,因为必须要是先该接口的一个抽象方法
int comparaTo(T t)
该方法用于使用当前对象与给定对象进行比较
诺当前对象大于给定对象,那么返回值为>0的整数
诺当前对象小于给定对象,那么返回值为<0的整数
诺两个对象相等,返回0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值