day3.22总结_List
2016-04-30 20:00
323 查看
一、集合的创建
Collection c1=new List();错Collection c2=new ArrayList();正确
Collection c3=new Vector();正确 (vector性能比较低)
List<String> c3=newArrayList<String>();正确
ArrayList<String> c4=newArrayList<String>(5)正确
List<? extends Number> list1=newArrayList<Double>(); //自身及子类
List<? super String> list2=newArrayList<CharSequence>();//自身及父类
二、参数传递
public class CollectionDemo04 { static void change(inta){ a=20; } static void change(int[]array){ array[0]=5; } static void change(String s){ s="LMN"; } public static void main(String[] args) { int a=10; change(a);//10 System.out.println(a); //=========== int array[]={1,2,3}; System.out.println(array); change(array); System.out.println(array[0]); //============ String s="ABC"; change(s);//change(s){s="LMN"}; System.out.println(s); } |
总结:
1.参数的传递就是对象的传递,就是传递对象的地址值,一般类型的都会在传递中改变值。(看如果新建了一个对象,原值就变)
2.特殊的:a.String---String s="ABC";就是在字符串池新建了一个,引用发生了改变。原值不变
b.array数组,地址值不变,引用指向不变,原值会改变
三、集合Collection的方法
反转: 第一种方式:先转换成数组 |
static void inverse01(List<String> list){ Object obj[]=list.toArray(); for(inti=0;i<obj.length/2;i++){ Object temp=obj[i]; obj[i]=obj[obj.length-i-1]; obj[obj.length-i-1]=temp; } for(inti=0;i<list.size();i++){ list.set(i, (String)obj[i]); } |
第二种方式:集合 |
static void inverse02(List<String> list){ for(inti=0,size=list.size()>>1;i<size;i++){ list.set(list.size()-i-1, list.set(i, list.get(list.size()-i-1))); } } |
四、LingkedList
1.方法:
addFirst();addLast();removeFirst();removeLast();Poll() 获取并移除此列表的头(第一个元素)
Peek() 获取但不移除此列表的头(第一个元素)
2.底层代码实现(原理能理解,代码半懂)
package day14; /**代表一个元素(Node)类型*/ class Element{ /**存储数据*/ Object data; /** 4000 后继指针*/ Element next; /**前驱指针*/ Element pre; public Element(Objectdata, Elementnext, Elementpre) { super(); this.data =data; this.next =next; this.pre =pre; } } class MyLinkedList{ private Elementfirst; private Elementlast; private int size; //定义一个header (Element类型) /**实现元素的添加(添加到最后)*/ publicvoid add(Objectdata){ //定义一个临时变量,存储最后一个节点 Element l=last; //构建一个新的节点 Element newNode= new Element(data,null,l); //判定原last节点是否为null if(l==null){ first=newNode; }else{ l.next=newNode; } //设置最后一个节点 last=newNode; //有效元素个数加1 size++; } public void addLast(Object data){ add(data); } public void addFirst(Object data){ //(参考LinkedList实现) } //...... public int size(){ return size; } @Override public String toString() { if(size==0)return"[]"; StringBuilder builder= new StringBuilder("["); builder.append(first.data).append(","); Element node=first.next; while(node!=null){ builder.append(node.data).append(","); node=node.next; } builder.deleteCharAt(builder.length()-1); builder.append("]"); return builder.toString(); } } public class LinkedListDemo03 { public static void main(String[] args) { MyLinkedList list= new MyLinkedList(); /*list.add("A"); list.add(100); list.add(true);*/ System.out.println(list.size()); System.out.println(list);//[A,100,true] } } |
3.遍历
/* for(String s:list){ System.out.println(s); }*/ /*Iterator<String> it= list.iterator(); while(it.hasNext()){ System.out.println(it.next()); }*/ ListIterator<String> it= list.listIterator(list.size()-1); while(it.hasPrevious()){ System.out.println(it.previous()); } |
五、List注意的问题:
1.删除时跳过元素问题
List<String> lst1=new ArrayList<>(); lst1.add("A"); lst1.add("B"); lst1.add("C"); for(inti=0;i<lst1.size();){ lst1.remove(i); }错误的,结果是B 自己改进的: for(inti=0;i<lst1.size();){ lst1.remove(i--); /*for(int i=lst1.size()-1;i>=0;i--){ lst1.remove(i); }*/从后面开始删除 System.out.println(lst1); } |
2.List转成数组
List<Integer> lst= //此集合不能执行添加,删除操作,但可以修改 Arrays.asList(1,2,3,4,5); //lst.add(100);错 lst.set(0, 6);//正确 System.out.println(lst); } |
相关文章推荐
- Android拍照裁剪图片
- 文通视频文字识别亮相国际广播电影电视设备展览会
- 杭州达内培训 就业情况怎么样
- 你必须了解的最经典java面试题
- Java中提供了抽象类的语法
- Java中的基本程序设计和结构
- Android使用什么的方法来获取屏幕尺寸
- 在升级到ubuntu 11.10手动安装Java7
- android 深圳宝体 达内全程学习课程转让
- 达内实训java第一天
- 达内实训java第二天
- 谈谈怎样来实现C++模块的队列
- 使用Hibernate 基本原理,步骤,核心,实现增删查改
- Java内存管理——内存分配
- Android实现录音的方法(最重要的是对MediaRecorder的试用方法)
- unbantu15.10安装android studio 2.0 beta5
- Android4.2关于bluetooth在HAL层的分析(1)
- 01,标准C
- 02,标准C
- 03,标准C