Não consigo armazenar valores diferente no List

Não consigo armazenar valores diferente no meu list.

 package Program;

import java.util.ArrayList;
import java.util.Scanner;
import Model.EmpresaModel;
import Model.FuncionariosModel;
public class Program {

public static void main (String[] args) {
        try (Scanner sc = new Scanner(System.in)) {
            EmpresaModel ftc = new EmpresaModel();
            FuncionariosModel funcionario = new FuncionariosModel();
            ftc.lista = new ArrayList<>();
            String oi;
            double salario;
            int teste, cpf;
            teste = sc.nextInt();
            while (teste != 0) {
                System.out.println("digite o nome: ");
                oi = sc.next();
                System.out.println("digite o cpf: ");
                cpf = sc.nextInt();
                System.out.println("digite o salario: ");
                salario = sc.nextDouble();
                funcionario.setNome(oi);
                funcionario.setCpf(cpf);
                funcionario.setSalario(salario);
                int cont= 0;
                ftc.lista.add(cont, funcionario);
                
                System.out.println(funcionario.toString());
                System.out.println("-------------------");
                System.out.println(ftc.toString());
                System.out.println("-------------------");
                System.out.println(ftc.lista.toString());
                System.out.println("-------------------");
                System.out.println(ftc.lista.get(cont));
                cont++;
                teste = sc.nextInt();
            }
            System.out.println(ftc.toString());
            sc.close();
       }
  }
}

Valores diferentes do quê? Que erro ocorre?

Abraço.

Vc instanciou um objeto tipo empresaModel, esse lista é um arrayList() nessa classe?

Exemplo, se eu quiser inserir + valores no arraylist utilizando o mesmo objetivo funcionário, ele não grava os valores anteriores e fica só repetindo o último valor salvo.

Sim amigo, o arraylist é da empresamodel sim

Se você quer inserir novos funcionários, precisa criar um novo funcionário a cada iteração.
Se não criar um novo funcionário, você estará simplesmente alterando os dados do funcionário existente e adicionando ele novamente na lista.

public static void main (String[] args) {
    try (Scanner sc = new Scanner(System.in)) {
        EmpresaModel ftc = new EmpresaModel();
        ftc.lista = new ArrayList<>();
        String oi;
        double salario;
        int teste, cpf;
        teste = sc.nextInt();
        int cont= 0;
        while (teste != 0) {
            // ler os dados
            System.out.println("digite o nome: ");
            oi = sc.next();
            System.out.println("digite o cpf: ");
            cpf = sc.nextInt();
            System.out.println("digite o salario: ");
            salario = sc.nextDouble();
            
            // criar um NOVO funcionário
            FuncionariosModel funcionario = new FuncionariosModel();
            funcionario.setNome(oi);
            funcionario.setCpf(cpf);
            funcionario.setSalario(salario);
            
            // adicionar o funcionário à lista
            ftc.lista.add(cont, funcionario);
            
            System.out.println(funcionario.toString());
            System.out.println("-------------------");
            System.out.println(ftc.toString());
            System.out.println("-------------------");
            System.out.println(ftc.lista.toString());
            System.out.println("-------------------");
            System.out.println(ftc.lista.get(cont));
            cont++;
            teste = sc.nextInt();
        }
        System.out.println(ftc.toString());
        sc.close();
   }
}

Vlw, é exatamente oq precisava.