有一个List<String>,里面装的全部都是数字字符串,比如{"1","2","5","6"},现在要进行插入,加入我要在index = 1的位置执行插入操作,那么List<String>就会变成{"1","2","3","5","6"},同样,现在在index = 2的位置执行插入操作,那么List<String>就会变成{"1","2","3","4","5","6"}。
    看到这里,你是不是觉得很简单。
    好吧,第一关来了
    我现在还要在index = 1 的位置执行插入操作,那么List<String>就会变成{"1","2","25","3","4","5","6"}
    是不是还是很简单,别急!现在还要在index = 1的位置执行插入操作,那么List<String>就会变成{"1","2","24","25","3","4","5","6"}。依次下去,当List<String>变成{"1","2","21","22","23","24","25","3","4","5","6"}的时候,再在index = 1的位置执行插入操作,那么List<String>就会变成{"1","2","205","21","22","23","24","25","3","4","5","6"},哈哈,升级了,位数增加,如此下去,就可以往前插入无数条。
    如果你觉得还是简单,那好
    假如现在List<String>是{"1","2","25","3","4","5","6"},现在我要在index = 2的位置执行插入操作,那么List<String>就会变成{"1","2","25","26","3","4","5","6"},如此下去,当List<String>变成{"1","2","25","26","27","28","29","3","4","5","6"}的时候,在"29"元素的后面执行插入操作,那么List<String>就会变成{"1","2","25","26","27","28","29","295","3","4","5","6"},又升级了!如此下去,在"2"和"3"之间就可以往前或者往后插入无数条记录了。
    你有更简单明了的实现吗?

解决方案 »

  1.   

    接口 List<E>API中有这样的一个函数,不知道LZ看了没有,,看了那么久还没看明白你说的是什么意思。 void add(int index, E element) 
              在列表的指定位置插入指定元素(可选操作)。
      

  2.   

        有一个List<String>,里面装的全部都是数字字符串,比如{"1","2","5","6"},现在要进行插入,加入我要在index = 1的位置执行插入操作,那么List<String>就会变成{"1","2","3","5","6"},同样,现在在index = 2的位置执行插入操作,那么List<String>就会变成{"1","2","3","4","5","6"}。1.原数据{"1","2","5","6"}
    2.“加入我要在index = 1的位置执行插入操作”:是不是在index = 1的位置插入一个数?
    3.插入后的数据{"1","2","3","5","6"}:为什么得到的数据是在index = 3的位置?
    4.现在在index = 2的位置执行插入操作:与第2步一样的操作吗?
    5.插入后的数据{"1","2","3","4","5","6"}:与第3步有同样的疑问。真心没看懂题意
      

  3.   

     
    2,是在index=1位置执行插入操作,只要执行了这个操作,那么这个地方就会根据规则自动插入一个数
    3,因为你是在需要插入的位置插入数字,插入的这个占据了这个位置,后面的数字就自动往后面移动
    4,恩,是一样的插入操作
      

  4.   


    这样吧,这里不能画图,我就用几组数据来形容吧
    1、源数据,里面都是字符串,为了方便,就不加引号了
    {1,2,4,6};
    2、在index=1的位置执行插入操作,这个插入操作不是说随便你插入哪一个数字,而是要按照一定的规则,这里面因为index=1的时候,是"2","2"后面是"4",所以在这地方执行插入操作,就会变成
    {1,2,3,4,6}
    因为插入,后面的数字自动往后移动
    3、如果第一个数字和第二个数字之间的数字相差值为1,比如"1","2",就像现在index = 0的时候,在这里插入操作,就会变成
    {1,15,2,3,4,6}
    4、继续在index = 0执行插入操作
    {1,14,15,2,3,4,6}
    5、继续
    {1,13,14,15,2,3,4,6}
    6、当变成
    {1,11,12,13,14,15.。。}
    7、继续在index = 0执行插入操作
    {1,105,11,12,13,14.。。}
    8、也就是如果前面一个数字和后面一个数字的数字值中间不允许塞入一个数字的时候,那么就自动增长一位,并且倒数第二位减1
    9、"15"到"2"之间的规则也是如此
      

  5.   


    public static void main(String[] args) {
    List<String> list = new ArrayList<String>();

    list.add("1");
    list.add("2");
    list.add("4");
    list.add("5");

    list.set(1, "3");//结果:1 3 4 5
    // list.add(1, "3");//结果:1 3 2 4 5

    // list.add("3");// 结果:1 2  4 5 3

    for(int i=0;i<list.size();i++){
    System.out.println(list.get(i));
    }

    }
    不知道楼主怎么向他的List里面添加数据的,我反正没有实现,希望楼主把他的代码贴出来.
    很有意思
      

  6.   

    不是set,是add,是插入,反正就是插入之后,后面的数字自动往后移动,然后前面还有能插入的空间,而且插完之后,顺序还是好的。
      

  7.   

    3、如果第一个数字和第二个数字之间的数字相差值为1,比如"1","2",就像现在index = 0的时候,在这里插入操作,就会变成
    {1,15,2,3,4,6}
    问:为什么是加入的是15,而不是别的(16),能否细说下规则
      

  8.   

    我是用C#实现的,java应该也差不多
    static void Main(string[] args)
            {
                List<string> vals = new List<string>();
                int[,] insert = new int[,] {{2,15},{10,16},{1,23}};//需要插入的项            //initialize List<string>
                vals.Add("1");
                vals.Add("2");
                vals.Add("4");
                vals.Add("5");            for (int i = 0; i < insert.GetLength(0); i++) //insert.GetLength(0)获取该数组的第一个维度长度
                {
                    ListInsert(insert[i,0],insert[i,1].ToString(),ref vals);
                }
                    foreach (string val in vals)
                    {
                        Console.Write(val + "  ");
                    }
            }        private static void ListInsert(int index, string item, ref List<string> vals)
            {
                if (vals.Count >= index)
                {
                    vals.Insert(index, item);
                }
                else
                {
                    vals.Insert(vals.Count, item);  //当index > List<string>元素大小时,默认将该item插入到最后
                    //vals.Add(item);               //add方法也可以实现该功能(当index > List<string>元素大小时,默认将该item插入到最后)
                }
            }
      

  9.   

    木有搞懂LZ在说什么,能把需求讲述明白也是种能力。
    LZ也许可以换个方式描述,有这种功能后能干什么。
      

  10.   

    List<String> my = new ArrayList<String>(){
    public List<String> insert(int index){
    return null;
    }
    };
    楼主应该是这个意思,但是我不明白这样有什么意思?
    这是不完全归纳?完全没意思!
      

  11.   

    就我的理解楼主的意思应该只是实现一个在指定下标位置插入功能,插入功能本身就意味着原来此位置及后续元素后移n位(n=插入元素个数),如果这个List是FIFO规则且其长度可变且没有上限的就符合要求
      

  12.   

    我虽然看明白了楼主要干啥,但是这个题目明显有问题啊,你给的初始的List就不满足你想要的那种操作啊!你不会想要随便给一个List然后再按照你那种操作来执行吧,这个就没有啥意义了吧?
      

  13.   

    这个我在想应该是算法的问题。不明白楼主为什么问能不能用java实现。java只是工具。另外。楼主这个貌似只是个数学问题。反正我没搞明白。
      

  14.   

    楼主,这种问题呐,建议直接用Double。也就是初始数组是:
      {0, 1}
    每次插入时,新值即为 前一个数 和 后一个数 的 平均值。那么:
    插入 1:{0, 0.5, 1}
    插入 1:{0, 0.25, 0.5, 1}
    插入 1:{0, 0.125, 0.25, 0.5, 1}
    插入 2:{0, 0.125, 0.1875, 0.25, 0.5, 1}
    插入 5:{0, 0.125, 0.1875, 0.25, 0.5, 0.75, 1}你所提问题用了整数,把问题其实稍微复杂化了。