C#基础之集合1

1.C#中集合用处无处不在,可是对于类似于小编这样的初学者在初次使用集合会遇到一些小问题.话不多说,看看代码。

code:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5
 6 namespace CnBog20140824
 7 {
 8     public class Program
 9     {
10         public static void Main(string[] args)
11         {
12             string str = "123";
13             List<string> lstStr = new List<string>();
14             lstStr.Add(str);
15             str = "213";
16             lstStr.Add(str);
17
18             string[] array = new string[1];
19             array[0] = "张三";
20             List<string[]> lstArray = new List<string[]>();
21             lstArray.Add(array);
22             array[0] = "李四";
23             lstArray.Add(array);
24
25             Console.ReadKey();
26         }
27     }
28 }

输出结果:通过变量快速监控,我们来看看集合的内容,对于lstStr类容已经发生变化了,可是对于lstArray虽然后面修改了数组的内容可是lstArray的每个元素都变成后面被修改的内容了。

    

原因分析:学过C/C++的都知道,变量分为值变量和地址变量,C#也一样,对于string,int,double这些类型的数据,每次改变信息后,都重新申请了存储空间,所以修改同一名称的变量的数据,地址也发生了变化,所以可以看见lstStr[0]和lstStr[1]的数据是一样的;反之对于List<string[]>来说,string[]和类来说声明了一个变量,其实变量指向的是地址,就算改变信息变量指向的地址是不会改变的,对于同一变量改变了数据,其实lstArray[0]和lstArray[1]说指向的数据地址是同一个,当然数据都一样。

newCode:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace CnBog20140824
{
    public class Program
    {
        public static void Main(string[] args)
        {
            string[] array = new string[1];
            array[0] = "张三";
            List<string[]> lstArray = new List<string[]>();
            lstArray.Add(array);
            array = new string[1];
            array[0] = "李四";
            lstArray.Add(array);

            Console.ReadKey();
        }
    }
}

输出结果: 每次使用的时候重新new 空间,那么lstArray里面数据就不一样了

时间: 2024-10-10 14:53:27

C#基础之集合1的相关文章

J2SE基础:10集合2

2:列表(List) 特点: (1):有序的(插入的顺序有序),元素有索引值. (2):允许重复. set/get/listIterator/subList ArrayList 特点:(1):底层数组方式实现. (2):元素是有序的.(是指添加进去的元素有序,不是指对象之间的顺序) (3):不是线程同步的. (4):由于是用数组实现,查找比较快. 循环: 迭代器 For循环 双向迭代器 LinkedList 特点:(1):底层机制链表方式实现. (2):元素是有序的.(是指添加进去的元素有序,不

java基础之集合Set

1.集合 当向集合Set中增加对象时,首先集合计算要增加对象的hashcode,根据该值得到一个位置用来存放当前的对象,当在该位置没有一个对象存在的时候,集合set认为该对象在集合中不存在,直接增加进去.如果在该位置有一个对象存在,接着将准备增加到集合中的的对象与该位置上的对象进行equals比较,若返回false,在进行一次散列,将该对象放到散列后计算出的新地址.若返回true,不会再将该对象增加到集合中 2.当重写equals方法时,必须要重写hashcode方法 如果一个类的两个对象,使用

java基础之集合List-ArrayList、LinkedList、Vector的区别

PS:本篇博客主要参考jdk的底层源码,而非自己动手写代码. 请问ArrayList.LinkedList.Vector的区别 ①ArrayList底层实际上是采用数组实现的(并且该数组的类型的Object类型的) ②如果jdk6,采用Array.copyOf()方法来生成一个新的数组,如果是jdk5,采用的是System.arraycopy()方法(当添加的数据量大于数组的长度时候) ③List list = newArrayList()时,底层会生成一个长度为10的数组来存放对象 ④Arra

黑马程序员——java基础 ArrayList集合基本方法演示

java基础 ArrayList集合基本方法演示 import java.util.ArrayList; import java.util.Iterator; public class ArrayListDemos { public static void main(String[] args) { // 创建一个新的容器 ArrayList al = new ArrayList(); al.add("abc1"); al.add("abc2"); al.add(&

黑马程序员——黑马基础——Map,集合框架工具类Conlections和Arrays

黑马程序员--黑马基础--Map,集合框架工具类Conlections和Arrays ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一,Map集合 Map<K,V>集合是一个接口,和List集合及Set集合不同的是,它是双列集合,并且可以给对象加上名字,即键(Key). 特点: 1)该集合存储键值对,一对一对往里存 2)要保证键的唯一性. Map集合的子类 Map |--Hashtable:底层是哈希表数据结构,不可以存入null键nu

基础篇——集合与泛型

一.集合 TreeSet:以有序状态保持并可防止重复,其元素必须是Comparable HashMap:可用成对的key/value来存取 LinkedList:针对经常插入或者删除中间元素所设计的高效率集合 HashSet:防止重复的集合,可快速地找出相符的元素 LinkedHashMap:类似HashMap,但可以记住元素插入的顺序,也可以设定成依照元素上次存取的先后来排序 ArrayList:可以避免重复的元素,动态的操作 二.排序 对于基础主数据类型,可以用Collection.sort

WPF ListView绑定基础数据类型集合

ListView中前台数据源绑定基础数据类型集合时没有Path名称,例如直接绑定List<string>,List<int>,BingdingList<string>等,此时直接使用{Bingding Path=.}即可 <ListView.View> <GridView> <GridViewColumn Header="HeaderName" > <GridViewColumn.CellTemplate&g

Java基础之 集合体系结构(Collection、List、ArrayList、LinkedList、Vector)

Java基础之 集合体系结构详细笔记(Collection.List.ArrayList.LinkedList.Vector) 集合是JavaSE的重要组成部分,其与数据结构的知识密切相联,集合体系就是对数据结构的封装 数组与集合的比较 数组:长度固定,可以存储基本数据类型,也能存储对象 集合:长度可变,只能存储对象类型(由于有包装类的存在,集合可以存储任何类型) 集合的体系结构 集合也叫容器,用于存储对象 我们根据不同的需求和不同的数据结构来对集合做了不同的抽象 Collection接口-公共

笔记-Microsoft SQL Server 2008技术内幕:T-SQL语言基础-06 集合运算

T-SQL支持3种集合运算:并集(UNION).交集(INTERSECT)和差集(EXCEPT).集合运算涉及的两个查询不能包含ORDER BY子句. UNION ALL集合运算 UNION ALL不会对行进行比较,也不会删除重复行.假设查询Query1返回m行,查询Query2返回n行,则Query1 UNION ALL Query2返回(m+n)行. SELECT country, region, city FROM HR.Employees UNION ALL SELECT country

黑马程序员-Java基础之集合(一)

集合框架:用于存储数据的容器. 特点: 1:对象封装数据,对象多了也需要存储.集合用于存储对象. 2:对象的个数确定可以使用数组,但是不确定怎么办?可以用集合.因为集合是可变长度的. 集合和数组的区别: 1:数组是固定长度的:集合可变长度的. 2:数组可以存储基本数据类型,也可以存储引用数据类型:集合只能存储引用数据类型. 3:数组存储的元素必须是同一个数据类型:集合存储的对象可以是不同数据类型.   数据结构:就是容器中存储数据的方式. 对于集合容器,有很多种.因为每一个容器的自身特点不同,其