数组与类集(集合)

来源:互联网 发布:usb3.0端口 编辑:程序博客网 时间:2024/05/01 07:08
数组
1.数组的声明:(数组一旦定义就不能更改)
例如dog是一个类
    int d=new dog[ ]
    dog tom[ ]; 数组tom的元素可以存放dog对象的引用;

       数据确定  int[] arr={3,1,5,6};  
       数据不确定   int arr=new int[4];
  二维数组 int arr[row][col]={{1,2,3},{2,3,5},{3,2,6}}  

2.数组定义方式
// 数组(第一种定义方法)
int[]counts= { 1, 2, 3, 4, 5, 6, 7 };
float[]menoys= { 1.5f, 1.3f };
char[]cs= { 'A', '中', 'c' };
//int counts[]={1,2,3,4,5,6,7};

// 第二种方法(先定义后赋值)
int[]numbers= newint[5];// 数组一旦初始化,则在内存中位置固定不变,且长度不能更改

//第三种定义方法
int[]number=new int[]{1,2,3};

3.获取数组中的元数,通常用到遍历。(相当与一个队列queen)
数组中有一个属性可以直接获取到数组元素个数,   .length
   使用方法:数组名称.length
int  arr=new int[2];
for(int x=0;x<3;x++)
{
  System.out.println( "arr{"+x +"}=" +arr [x ]+";" );
}
for(int i:arr){     //foreach循环   增强foreach
 System.out.println( "arr{"+x +"}=" +arr [x ]+";" );
 i++;
}  
 在遍历数组、集合方面,foreach为开发人员提供了极大的方便
for(元素数据类型  元素变量:遍历对象){    //增强foreach
      执行代码
}

4.冒泡排序(bubble sort)
算法分析:如果有n个数,则要进行n-1趟比较。在第1趟比较中要进行n-1次相邻元素的两两比较,在第j趟比较中要进行n-j次两两比较。比较的顺序从前往后,经过一趟比较后,将最值沉底(换到最后一个元素位置),最大值沉底为升序,最小值沉底为降序。
 // 冒泡排序
int[]arry=newint[] { 23, 33, 13, 2, 9 };
intlength=arry.length;
for(inti = 0;i <length- 1;i++) {
System.out.println("第"+i +"趟");
for(intj = 0;j <length- 1 -i;j++) {
// 第一次循环
if(arry[j] > arry[j+ 1]) {
inttemp=arry[j];
arry[j] = arry[j+ 1];
arry[j+ 1] =temp;
System.out.println(arry[j] + "=====" +arry[j+ 1]);}}}
System.out.println("排序完成后");
for(inti = 0;i <length;i++) {
System.out.print(arry[i] + "、);}

5.数组排序Arrays.sort( );
将数组转换成字符串Arrays.toString( 数组名);


集合(Collection)
       list  set   Map 
不可变类:当创建了这种类的实例后,就不允许修改它的属性。  —— 数组

在遍历set的时候,记住用for就行了,不需要用Iterator http://ahomeeye.iteye.com/blog/1235370

1.数组(长度是固定)多了用对象存,对象多了用集合(可变长度)存。
2.每个容器对数据的存贮方式都有不同。这个存储方式称为:数据结构(为何出现这么多容器)
3.集合和数组都存放的是对象的引用(地址)。
4.获取迭代器,用于取出集合中的元素。
三种循环模式 foreach, for, iterator 
for(数据类型 元素变量 :遍历对象){  }
       Iterator(迭代器) 
        eg.            ArrayList a1= new ArrayList ();  
 Iterator it= a1.iterator();             
            while( it.hasNext()){    //hasNext如果仍有元素迭代,则返回true
                 sop(it .next());   //next返回迭代的下一个元素
           }
     public static void sop(Object obj){
           System. out.println( obj);
           }
     集合的取出元素的方式(什么是迭代器)
5.List<列表>:元素是有序的(集合中对象按索引的位置排序),元素可以重复,因为该集合体系有索引。
特有方法,凡是可以操作角标的方法都是该体系特有的方法。
主要接口(LinkedList和ArrayList)
增: 对象.add(index,element);
       addAll(index,collection);
删:   remove(index);
改:   set(index,element);
查:   get(index);
       subList(from,to);
       listitrator();
{ArrayList:底层的数据结构使用的是数组结构,特点:查询数度很快,但是增删稍慢,线程不同步}
{LinkedList:底层使用的链表数据结构,特点:增删速度快,查询稍慢
{Vector:底层是数组数据结构,  线程同步,被ArrayList替代了}

6.LinkedList:LinkedList:特有方法getFirst(); 
getLast();获取元素,但不删除元素
removeFirst();  removeLast();获取元素,同时删除元素。
compareTO:
比较用来排序的两个参数。根据第一个参数小于、等于或大于第二个参数分别返回负整数、零或正整数。
返回整数,1,-1,0;返回1表示大于,返回-1表示小于,返回0表示相等。


7.堆栈:先进后出  (如同一个杯子)
  队列:先进先出  (如同一个水管)

8. Set<集>:元素是无序(存入和取出的顺序不一定一致)的,元素不可以重复。
hashSet采用散列式排序(无序),TreeSet有序排序
 a 常见的子类:(hashSet/TreeSet)
  HashSet:底层数据结构是哈希表。线程是非同步的。保证元素的唯一性的原理,判断元素的HashCode值是否相同。(不能存放重复元素,无序
  HashSet类按照哈希算法来存取集合中的对象,具有很好的存取性能,当HasSet向集合中加入一个对象时会调用对象的hasCode()方法获得哈希码然后根据这个哈希码进一步计算出对象在集合中存放位置。       
  b. hashSet是如何保存元素的唯一性呢?
    如果元素的HashCode值相同,才会判断equals是否为true如果元素的HashCode值不同,不会调用equals.
       TreeSet:    (不能存放重复元素,有序
  c. set功能和collection是一致的:
TreeSet向集合中加入一个对象时,会把它插入到有序的对象序列中,TreeSet调用对象的comparaTo()方法比较集合中对象的大小,然后进行升序排列,这种排序方法称为自然排序。
客户化排序:自定义实现Comparator接口的类,在TreeSet实例中调用。
 d. Set采用对象的equals()方法比较两个对象是否相等,而不是采用“==”比较运算符。


9.Map<映射>集合:该集合存储键值对,一对一对往里存。集合中没有重复的键对象,值对象可以重复。(常见的实现HashMap和TreeMap)
Map<K,V>          
map集合的两种取出方式:
 keySet:将map中所有的键存入到set集合,因为set具备迭代器。所有可以迭代方式取出所有的键,在根据get方法,获取每一个键对应的值。
 entrySet: 将Map集合中的映射关系存入到了set集合中,返回此映射中包含的映射关系的 Set 视图
Map.Entry 其实Entry也是一个接口,它是Map接口中的一个内部接口。
    
Hash表:
类型参数:
K - 此映射所维护的键的类型
V - 映射值的类型
1.添加。
put(K key, V value)
          将指定的值与此映射中的指定键关联(可选操作)。
2.判断  
insKey(Object key)    
如果此映射包含指定键的映射关系,则返回 true

    containsValue(Object value)
   如果此映射将一个或多个键映射到指定值,则返回 true
3获.取
map集合的取出原理:将map集合转成set集合

keySet()  返回此映射中包含的键的 Set 视图。     将Map中所有的键存入到set 集合,因为set具备迭代器,所有可以迭代方式取出的所有的键,在根据get方法,获取每一个键对应的值size()    返回此映射中的键-值映射关系数。
get(Object key)   
返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null
4.删除   clear( )
remove(Object key)          如果存在一个键的映射关系,则将其从此映射中移除(可选操作)。

10 Map 
 |--HashTable:底层是哈希表结构,不可以存入NULL键Null值,该集合是线程同步
 |--HashMap: 底层是哈希表结构,允许使用null值和null键,该集合是不同步的.按照哈希算法来存取键对象,有很好的存取性能
 |--TreeMap: 底层是二叉树数据结构,线程不同步,可以用于给map集合中的键 进行排序.也支持自然排序和客户化排序两种方式

Key可以重复的Map集合:identityHashMap(使用此类时,地址不相等(key1 !=key2),就表示不是重复的key.

排序的子类:TreeMap
直接使用非系统类作为Key

11.SortedMap接口是排序接口,只要是实现了此接口的子类,都属于排序的子类,TreeMap也是此接口的一个子类.     
          返回小于指定范围
headMap(K toKey)     返回此映射的部分视图,其键值严格小于 toKey
               for(map.entry<String,String> me: map.  headMap ("B").entrySet)   
                     返回大于指定范围
tailMap(K fromKey)                                返回此映射的部分视图,其键大于等于 fromKey
                         for(map.entry<String,String>: map.tailMap().entrySet( ))
                   
   
10.Stack类 (栈采用先进后出的数据存储方法)
实例:使用浏览器时,每次后退都是后退到上一步,实际就是一个栈的应用.

11.Properties(属性类)

0 0
原创粉丝点击